void Camera :: setModelViewMatrix(void) { // load modelview matrix with existing camera values float m[16]; Vector3 eVec(eye.x, eye.y, eye.z); // a vector version of eye m[0] = u.x; m[4] = u.y; m[8] = u.z; m[12] = -eVec.dot(u); m[1] = v.x; m[5] = v.y; m[9] = v.z; m[13] = -eVec.dot(v); m[2] = n.x; m[6] = n.y; m[10] = n.z; m[14] = -eVec.dot(n); m[3] = 0; m[7] = 0; m[11] = 0; m[15] = 1.0; glMatrixMode(GL_MODELVIEW); glLoadMatrixf(m); // load OpenGL’s modelview matrix } void Camera:: set(Point3 Eye, Point3 look, Vector3 up) { // create a modelview matrix and send it to OpenGL eye.set(Eye); // store the given eye position n.set(eye.x - look.x, eye.y - look.y, eye.z - look.z); // make n u.set(up.cross(n)); // make u = up X n n.normalize(); u.normalize(); // make them unit length v.set(n.cross(u)); // make v = n X u setModelViewMatrix(); // tell OpenGL }