Dvoid Camera::ViewMatrixCalculate() { Matrix33 rotate; rotate.SetColumns(m_vDir[CD_RIGHT], m_vDir[CD_UP], -m_vDir[CD_FRONT]); rotate.Transpose(); m_matCam[CM_VIEW].Rotation(rotate); // set translation (rotate into view space) Vector3 invEye = -(rotate* m_vPos); m_matCam[CM_VIEW](0, 3) = invEye.x; m_matCam[CM_VIEW](1, 3) = invEye.y; m_matCam[CM_VIEW](2, 3) = invEye.z; }
//world -> view Matrix44 TransformHelper::CreateView(const Vector3& eye, const Vector3& lookAt, const Vector3& up) { // compute view vectors Vector3 view = lookAt - eye; Vector3 right; Vector3 viewUp; view.Normalize(); right = view.Cross(up); right.Normalize(); viewUp = right.Cross(view); viewUp.Normalize(); // now set up matrices // base rotation matrix Matrix33 rotate; rotate.SetColumns(right, viewUp, -view); // view->world transform // set rotation //Matrix44 mViewToWorldMatrix; //mViewToWorldMatrix.Rotation(rotate); //// set translation (eye position) //mViewToWorldMatrix(0, 3) = eye.x; //mViewToWorldMatrix(1, 3) = eye.y; //mViewToWorldMatrix(2, 3) = eye.z; // world->view transform // set rotation Matrix44 mWorldToViewMatrix; rotate.Transpose(); mWorldToViewMatrix.Rotation(rotate); // set translation (rotate into view space) Vector3 invEye = -(rotate*eye); mWorldToViewMatrix(0, 3) = invEye.x; mWorldToViewMatrix(1, 3) = invEye.y; mWorldToViewMatrix(2, 3) = invEye.z; return mWorldToViewMatrix; }