$25
1. Write your own myLookAt() and myFrustum() functions (of the following form) that behaves exactly same as gluLookAt() and glFrustum().
def myLookAt(eye, at, up): # eye, at, up are 1D numpy array of length 3
A. def myFrustum(left, right, bottom, top, near, far):
B. Set the window title to your student ID and the window size to (480,480).
C. Code skeleton
def render(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glEnable(GL_DEPTH_TEST)
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ) glLoadIdentity()
myFrustum(-1,1, -1,1, 1,10)
myLookAt(np.array([5,3,5]), np.array([1,1,-1]), np.array([0,1,0]))
# Above two lines must behave exactly same as the below two lines
#glFrustum(-1,1, -1,1, 1,10)
#gluLookAt(5,3,5, 1,1,-1, 0,1,0)
drawFrame()
glColor3ub(255, 255, 255) drawCubeArray()
def myFrustum(left, right, bottom, top, near, far):
# implement here
def myLookAt(eye, at, up): # implement here
D. Find code for drawFrame(), drawCubeArray() from 6-Viewing & Projection2 & mesh slides.
E. DO NOT use gluLookAt() inside myLookAt() and glFrustum() inside myFrustum()!
F. Your program should render the following scene:
i.
G. Hint:
1. To implement myLookAt(), see lecture slide 5-reference-viewing. To implement myFrustum(), see lab slide 6-Viewing & Projection2, mesh .
2. l2 norm of v : ||v|| = np.sqrt( np.dot(v, v) )
3. a x b (cross product) : np.cross(a, b)
4. a ȡ b (inner product) : np.dot(a, b) or a@b
5. Use glMultMatrixf() to multiply your projection matrix and viewing matrix to the current transformation matrix.
2. Write down a Python program to draw following cube (ࢽִ) by using indexed squares representation and glDrawElements().
A.
B. Length of each line is 1.5
C. Start from the code in 6-Viewing & Projection2 & mesh slides. Make sure camera
PDQLSXODWLRQVKRUWFXWVěĜěĜěĜěZĜZRUN'RQĜWQHHGWRFDUHDERXWLQLWLDOYLHZDQJOH D. Set the window title to your student ID and the window size to (480,480).