void Camera::Update() { //更新输入 POINT curCursorPos; GetCursorPos(&curCursorPos); static POINT lastCursorPos = curCursorPos; long dx = curCursorPos.x - lastCursorPos.x; long dy = curCursorPos.y - lastCursorPos.y; float yawDelta = 0, pitchDelta = 0; if(dx) yawDelta = -dx/5.0f; if(dy) pitchDelta = -dy/5.0f; lastCursorPos = curCursorPos; if(!m_bActive) return; //相机旋转 if(dx) { Yaw(yawDelta); } if(dy) { MAT44 rotX; rotX.FromAxisAngle(VEC3::UNIT_X, pitchDelta); //pitch m_matRot = Common::Multiply_Mat44_By_Mat44(m_matRot, rotX); } //相机移动 VEC4 forward = GetDirection(); VEC4 right = GetRight(); forward = Common::Multiply_Vec4_By_K(forward, m_moveSpeed); right = Common::Multiply_Vec4_By_K(right, m_moveSpeed); if(GetAsyncKeyState('W') < 0) m_viewPt = Add_Vec4_By_Vec4(m_viewPt, forward); else if(GetAsyncKeyState('S') < 0) m_viewPt = Sub_Vec4_By_Vec4(m_viewPt, forward); if(GetAsyncKeyState('A') < 0) m_viewPt = Sub_Vec4_By_Vec4(m_viewPt, right); else if(GetAsyncKeyState('D') < 0) m_viewPt = Add_Vec4_By_Vec4(m_viewPt, right); m_viewPt.w = 1; _BuildViewMatrix(); _BuildProjMatrix(); }
void Camera::SetAspectRatio( float r ) { m_aspectRatio = r; _BuildProjMatrix(); }
void Camera::SetFarClip( float f ) { m_farClip = f; _BuildProjMatrix(); }
void Camera::SetNearClip( float n ) { m_nearClip = n; _BuildProjMatrix(); }
void Camera::SetAspectRatio( float fAspectRatio ) { m_aspectRatio = fAspectRatio; _BuildProjMatrix(); }