コード例 #1
0
ファイル: Camera.cpp プロジェクト: lai3d/ThisIsASoftRenderer
	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();
	}
コード例 #2
0
ファイル: Camera.cpp プロジェクト: whztt07/NeoEngine
	void Camera::SetAspectRatio( float r )
	{
		m_aspectRatio = r;
		_BuildProjMatrix();
	}
コード例 #3
0
ファイル: Camera.cpp プロジェクト: whztt07/NeoEngine
	void Camera::SetFarClip( float f )
	{
		m_farClip = f;
		_BuildProjMatrix();
	}
コード例 #4
0
ファイル: Camera.cpp プロジェクト: whztt07/NeoEngine
	void Camera::SetNearClip( float n )
	{
		m_nearClip = n;
		_BuildProjMatrix();
	}
コード例 #5
0
ファイル: Camera.cpp プロジェクト: lai3d/ThisIsASoftRenderer
	void Camera::SetAspectRatio( float fAspectRatio )
	{
		m_aspectRatio = fAspectRatio;
		_BuildProjMatrix();
	}