//-----------------------------------------------------------------------------------
void Renderer::RotateView(float degrees, const Vector3& axis)
{
	//From page 111 in Chapter 8 of 3D Math Primer for Graphics and Game Development
	Matrix4x4 rotation = Matrix4x4::IDENTITY;
	float cosineDegrees = MathUtils::CosDegrees(degrees);
	float sineDegrees = MathUtils::SinDegrees(degrees);
	float oneMinusCosineDegrees = (1.0f - cosineDegrees);
	rotation.data[0] = (axis.x * axis.x) * oneMinusCosineDegrees + cosineDegrees;
	rotation.data[1] = (axis.x * axis.y) * oneMinusCosineDegrees - (axis.z * sineDegrees);
	rotation.data[2] = (axis.x * axis.z) * oneMinusCosineDegrees + (axis.y * sineDegrees);
	rotation.data[3] = 0;
	rotation.data[4] = (axis.x * axis.y) * oneMinusCosineDegrees + (axis.z * sineDegrees);
	rotation.data[5] = (axis.y * axis.y) * oneMinusCosineDegrees + cosineDegrees;
	rotation.data[6] = (axis.y * axis.z) * oneMinusCosineDegrees - (axis.x * sineDegrees);
	rotation.data[7] = 0;
	rotation.data[8] = (axis.x * axis.z) * oneMinusCosineDegrees - (axis.y * sineDegrees);	
	rotation.data[9] = (axis.y * axis.z) * oneMinusCosineDegrees + (axis.x * sineDegrees);
	rotation.data[10] = (axis.z * axis.z) * oneMinusCosineDegrees + cosineDegrees;
	rotation.data[11] = 0;
	rotation.data[12] = 0;
	rotation.data[13] = 0;
	rotation.data[14] = 0;
	rotation.data[15] = 1;
	PushView(rotation);
}
Пример #2
0
    virtual void Init()
    {
        Super::Init();
        m_pView = new TankView(*m_pRender);
	m_pView->Init();
	PushView(*m_pView);
    }
//-----------------------------------------------------------------------------------
void Renderer::TranslateView(const Vector3& translation)
{
	Matrix4x4 translationMatrix = Matrix4x4::IDENTITY;
	Matrix4x4::MatrixMakeTranslation(&translationMatrix, translation);
	PushView(translationMatrix);
}