$30
1. Implement a basic OpenGL viewer. This viewer will also be used in your future class assignments.
A. You have to implement all requirements in a single program. This assignment DOES NOT require each requirement to be a separate program.
B. The window size doesn't need to be (480, 480). Use the larger window that is enough to see the details of the viewer.
C. DO NOT set the window title to your student ID.
2. Requirements
A. Manipulate the camera with mouse movement
i. Refer the camera manipulation of Blender software.
1. https://www.blender.org/download/
ii. The camera of your program should initially look at a target point, similar to that of Blender.
1. Initialize the target point to the origin (0, 0, 0)
2.
iii. Provide the following three camera control operations.
1. Orbit: Rotate the camera around the target point by changing azimuth / elevation angles. (MMB (mouse middle button) in Blender)
A. Do not rotate the camera about a vector from the camera to the target point.
2. Panning: Move both the target point and camera in left, right, up and down direction of the camera (Shift-MMB in Blender)
A. More specifically, translate both the target point and camera along u axis (left & right) and v axis (up & down) of the camera frame.
3. Zooming: Move the camera forward toward the target point (zoom in) and backward away from the target point (zoom out) (Ctrl-MMB in Blender) A. A. More specifically, translate the camera along w axis of the camera frame.
B.
4. You MUST use the following mouse movement:
A. Orbit: Click mouse left button & drag
B. Panning: Click mouse right button & drag
C. Zooming: Rotate mouse wheel
D. Using above mouse movements is essential for scoring your assignment, so if you use any other set of mouse movement or keyboard shortcuts for Orbit / Panning / Zooming, you won’t get any score for them.
iv. Toggle perspective projection / orthogonal perspective projection by pressing ‘v’ key
1. When the program is executed, it starts in perspective projection mode.
v. Draw a rectangular grid with lines (not polygons) on xz plane as a reference ground plane (similar to Blender). Choose number of rows and columns, size as you want.
4. Runtime Environment
A. Your program should be able to run on systems only with Python 3.7 or later, NumPy, PyOpenGL, glfw. Do not use any other additional python modules.
B. Only glfw is allowed for event processing and window & OpenGL context management. Do not use glut functions for this purpose.
C. If your program does not meet this requirement, it will not run on TA's computer so
you will not get any score for this assignment (except report).