CMatrix4x4 CMatrix4x4::operator *(CMatrix4x4 &m) { return CMatrix4x4(matrix[0] * m.matrix[0] + matrix[4] * m.matrix[1] + matrix[8] * m.matrix[2] + matrix[12] * m.matrix[3], matrix[1] * m.matrix[0] + matrix[5] * m.matrix[1] + matrix[9] * m.matrix[2] + matrix[13] * m.matrix[3], matrix[2] * m.matrix[0] + matrix[6] * m.matrix[1] + matrix[10] * m.matrix[2] + matrix[14] * m.matrix[3], matrix[3] * m.matrix[0] + matrix[7] * m.matrix[1] + matrix[11] * m.matrix[2] + matrix[15] * m.matrix[3], matrix[0] * m.matrix[4] + matrix[4] * m.matrix[5] + matrix[8] * m.matrix[6] + matrix[12] * m.matrix[7], matrix[1] * m.matrix[4] + matrix[5] * m.matrix[5] + matrix[9] * m.matrix[6] + matrix[13] * m.matrix[7], matrix[2] * m.matrix[4] + matrix[6] * m.matrix[5] + matrix[10] * m.matrix[6] + matrix[14] * m.matrix[7], matrix[3] * m.matrix[4] + matrix[7] * m.matrix[5] + matrix[11] * m.matrix[6] + matrix[15] * m.matrix[7], matrix[0] * m.matrix[8] + matrix[4] * m.matrix[9] + matrix[8] * m.matrix[10] + matrix[12] * m.matrix[11], matrix[1] * m.matrix[8] + matrix[5] * m.matrix[9] + matrix[9] * m.matrix[10] + matrix[13] * m.matrix[11], matrix[2] * m.matrix[8] + matrix[6] * m.matrix[9] + matrix[10] * m.matrix[10] + matrix[14] * m.matrix[11], matrix[3] * m.matrix[8] + matrix[7] * m.matrix[9] + matrix[11] * m.matrix[10] + matrix[15] * m.matrix[11], matrix[0] * m.matrix[12] + matrix[4] * m.matrix[13] + matrix[8] * m.matrix[14] + matrix[12] * m.matrix[15], matrix[1] * m.matrix[12] + matrix[5] * m.matrix[13] + matrix[9] * m.matrix[14] + matrix[13] * m.matrix[15], matrix[2] * m.matrix[12] + matrix[6] * m.matrix[13] + matrix[10] * m.matrix[14] + matrix[14] * m.matrix[15], matrix[3] * m.matrix[12] + matrix[7] * m.matrix[13] + matrix[11] * m.matrix[14] + matrix[15] * m.matrix[15]); }
CMatrix4x4 CMatrix4x4::operator *(float f) { return CMatrix4x4(matrix[0] * f, matrix[1] * f, matrix[2] * f, matrix[3] * f, matrix[4] * f, matrix[5] * f, matrix[6] * f, matrix[7] * f, matrix[8] * f, matrix[9] * f, matrix[10] * f, matrix[11] * f, matrix[12] * f, matrix[13] * f, matrix[14] * f, matrix[15] * f); }
CMatrix4x4 CMatrix4x4::operator+(CMatrix4x4 &m) { return CMatrix4x4(matrix[0] + m.matrix[0], matrix[1] + m.matrix[1], matrix[2] + m.matrix[2], matrix[3] + m.matrix[3], matrix[4] + m.matrix[4], matrix[5] + m.matrix[5], matrix[6] + m.matrix[6], matrix[7] + m.matrix[7], matrix[8] + m.matrix[8], matrix[9] + m.matrix[9], matrix[10] + m.matrix[10], matrix[11] + m.matrix[11], matrix[12] + m.matrix[12], matrix[13] + m.matrix[13], matrix[14] + m.matrix[14], matrix[15] + m.matrix[15]); }
CMatrix4x4 CMatrix4x4::operator-(CMatrix4x4 &m) { return CMatrix4x4(matrix[0] - m.matrix[0], matrix[1] - m.matrix[1], matrix[2] - m.matrix[2], matrix[3] - m.matrix[3], matrix[4] - m.matrix[4], matrix[5] - m.matrix[5], matrix[6] - m.matrix[6], matrix[7] - m.matrix[7], matrix[8] - m.matrix[8], matrix[9] - m.matrix[9], matrix[10] - m.matrix[10], matrix[11] - m.matrix[11], matrix[12] - m.matrix[12], matrix[13] - m.matrix[13], matrix[14] - m.matrix[14], matrix[15] - m.matrix[15]); }
CEntity::CEntity( CEntityTemplate* Template, //Pointer to the template for the entity string Name, //Name of entity CVector3 pos, //( 0.0f, 0.0f, 0.0f ) //Initial positioning of Entity CVector3 rot, //( 0.0f, 0.0f, 0.0f ) //Initial rotation CVector3 scale )//( 1.0f, 1.0f, 1.0f ) //Initial scale, these and 2 above will create matrix { m_Template = Template; m_Name = Name; m_UID = Name; // Need to scale the meshes bounding radius depending on the scaling of the entity m_Scale = scale; float rScale = ( scale.x+scale.y+scale.z )/3.0f; m_ScaledBoundRadius = rScale * m_Template->Mesh()->BoundingRadius(); m_ZAxisRadius = m_Template->Mesh()->MaxBounds().z * m_Scale.z; m_XAxisRadius = m_Template->Mesh()->MaxBounds().x * m_Scale.x; int numNodes = m_Template->Mesh()->GetNumNodes(); m_WorldMatrices = new CMatrix4x4[numNodes]; m_LocalMatrices = new CMatrix4x4[numNodes]; for(int i=1; i<numNodes; ++i) { m_LocalMatrices[i] = m_Template->Mesh()->GetNode( i ).positionMatrix; } //Overwrite the root node with desired matrix m_LocalMatrices[0] = CMatrix4x4( pos, rot, kZXY, scale ); }
CMatrix4x4 CMatrix4x4::operator /(float f) { if(f == 0) f = 1; f = 1/f; return CMatrix4x4(matrix[0] * f, matrix[1] * f, matrix[2] * f, matrix[3] * f, matrix[4] * f, matrix[5] * f, matrix[6] * f, matrix[7] * f, matrix[8] * f, matrix[9] * f, matrix[10] * f, matrix[11] * f, matrix[12] * f, matrix[13] * f, matrix[14] * f, matrix[15] * f); }
/******************************************************************************* * Cristian Alexandrescu * * 2163013577ba2bc237f22b3f4d006856 * * 11a4bb2c77aca6a9927b85f259d9af10db791ce5cf884bb31e7f7a889d4fb385 * * bc9a53289baf23d369484f5343ed5d6c * *******************************************************************************/ #include "matrix4x4.h" template <> const CMatrix4x4<float> CMatrix4x4<float>::Identity = CMatrix4x4( 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f ); template <> const CMatrix4x4<float> CMatrix4x4<float>::Zero = CMatrix4x4( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f );