Practical sessions
There are some additions you could make to the code:
- Calculate azimuth and elevation when moving the camera.
Right now, the values for azimuth and elevation are hard-coded. You could try to calculate both values from the transformation matrix.
- Implement a visual multi-selection.
Enhance the selection so that holding Ctrl or Shift during selection clicks will add the newly selected instance to the other selected instances, instead of replacing the current selected instance.
- Extra difficulty: Implement instance moving via coordinate arrows.
Since the coordinate arrows for the selection are drawn in a separate shader, you could try to add an extra set of selection indices to the arrows and adding the arrows to the selection texture. When the user clicks on one of the arrows instead of the mode, you could switch the application to a mode where the instance can be moved along the selected axis. This behavior...