/*!*************************************************************************** @Function Name PVRTMatrixRotationZF @Output mOut Rotation matrix @Input fAngle Angle of the rotation @Description Create an Z rotation matrix mOut. *****************************************************************************/ void PVRTMatrixRotationZF( PVRTMATRIXf &mOut, const float fAngle) { float fCosine, fSine; /* Precompute cos and sin */ #if defined(BUILD_DX9) || defined(BUILD_D3DM) || defined(BUILD_DX10) fCosine = (float)PVRTFCOS(-fAngle); fSine = (float)PVRTFSIN(-fAngle); #else fCosine = (float)PVRTFCOS(fAngle); fSine = (float)PVRTFSIN(fAngle); #endif /* Create the trigonometric matrix corresponding to Z Rotation */ mOut.f[ 0]=fCosine; mOut.f[ 4]=fSine; mOut.f[ 8]=0.0f; mOut.f[12]=0.0f; mOut.f[ 1]=-fSine; mOut.f[ 5]=fCosine; mOut.f[ 9]=0.0f; mOut.f[13]=0.0f; mOut.f[ 2]=0.0f; mOut.f[ 6]=0.0f; mOut.f[10]=1.0f; mOut.f[14]=0.0f; mOut.f[ 3]=0.0f; mOut.f[ 7]=0.0f; mOut.f[11]=0.0f; mOut.f[15]=1.0f; }
/*!*************************************************************************** @Function PVRTMatrixQuaternionRotationAxisF @Output qOut Rotation quaternion @Input vAxis Axis to rotate around @Input fAngle Angle to rotate @Description Create quaternion corresponding to a rotation of fAngle radians around submitted vector. *****************************************************************************/ void PVRTMatrixQuaternionRotationAxisF( PVRTQUATERNIONf &qOut, const PVRTVECTOR3f &vAxis, const float fAngle) { float fSin, fCos; fSin = (float)PVRTFSIN(fAngle * 0.5f); fCos = (float)PVRTFCOS(fAngle * 0.5f); /* Create quaternion */ qOut.x = vAxis.x * fSin; qOut.y = vAxis.y * fSin; qOut.z = vAxis.z * fSin; qOut.w = fCos; /* Normalise it */ PVRTMatrixQuaternionNormalizeF(qOut); }