//----------------------------------------------------------------------------------- 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); }
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); }