|  | /*!**************************************************************************** | 
|  |  | 
|  | @file         PVRTMatrix.h | 
|  | @copyright    Copyright (c) Imagination Technologies Limited. | 
|  | @brief        Vector and Matrix functions for floating and fixed point math. | 
|  | @details      The general matrix format used is directly compatible with, for | 
|  | example, both DirectX and OpenGL. | 
|  |  | 
|  | ******************************************************************************/ | 
|  | #ifndef _PVRTMATRIX_H_ | 
|  | #define _PVRTMATRIX_H_ | 
|  |  | 
|  | #include "PVRTGlobal.h" | 
|  | /**************************************************************************** | 
|  | ** Defines | 
|  | ****************************************************************************/ | 
|  | #define MAT00 0 | 
|  | #define MAT01 1 | 
|  | #define MAT02 2 | 
|  | #define MAT03 3 | 
|  | #define MAT10 4 | 
|  | #define MAT11 5 | 
|  | #define MAT12 6 | 
|  | #define MAT13 7 | 
|  | #define MAT20 8 | 
|  | #define MAT21 9 | 
|  | #define MAT22 10 | 
|  | #define MAT23 11 | 
|  | #define MAT30 12 | 
|  | #define MAT31 13 | 
|  | #define MAT32 14 | 
|  | #define MAT33 15 | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Typedefs | 
|  | ****************************************************************************/ | 
|  | /*!*************************************************************************** | 
|  | @brief     2D floating point vector | 
|  | *****************************************************************************/ | 
|  | typedef struct | 
|  | { | 
|  | float x;	/*!< x coordinate */ | 
|  | float y;	/*!< y coordinate */ | 
|  | } PVRTVECTOR2f; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     2D fixed point vector | 
|  | *****************************************************************************/ | 
|  | typedef struct | 
|  | { | 
|  | int x;	/*!< x coordinate */ | 
|  | int y;	/*!< y coordinate */ | 
|  | } PVRTVECTOR2x; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     3D floating point vector | 
|  | *****************************************************************************/ | 
|  | typedef struct | 
|  | { | 
|  | float x;	/*!< x coordinate */ | 
|  | float y;	/*!< y coordinate */ | 
|  | float z;	/*!< z coordinate */ | 
|  | } PVRTVECTOR3f; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     3D fixed point vector | 
|  | *****************************************************************************/ | 
|  | typedef struct | 
|  | { | 
|  | int x;	/*!< x coordinate */ | 
|  | int y;	/*!< y coordinate */ | 
|  | int z;	/*!< z coordinate */ | 
|  | } PVRTVECTOR3x; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     4D floating point vector | 
|  | *****************************************************************************/ | 
|  | typedef struct | 
|  | { | 
|  | float x;	/*!< x coordinate */ | 
|  | float y;	/*!< y coordinate */ | 
|  | float z;	/*!< z coordinate */ | 
|  | float w;	/*!< w coordinate */ | 
|  | } PVRTVECTOR4f; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     4D fixed point vector | 
|  | *****************************************************************************/ | 
|  | typedef struct | 
|  | { | 
|  | int x;	/*!< x coordinate */ | 
|  | int y;	/*!< y coordinate */ | 
|  | int z;	/*!< z coordinate */ | 
|  | int w;	/*!< w coordinate */ | 
|  | } PVRTVECTOR4x; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @class     PVRTMATRIXf | 
|  | @brief     4x4 floating point matrix | 
|  | *****************************************************************************/ | 
|  | class PVRTMATRIXf | 
|  | { | 
|  | public: | 
|  | float* operator [] ( const int Row ) | 
|  | { | 
|  | return &f[Row<<2]; | 
|  | } | 
|  | float f[16];	/*!< Array of float */ | 
|  | }; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @class     PVRTMATRIXx | 
|  | @brief     4x4 fixed point matrix | 
|  | *****************************************************************************/ | 
|  | class PVRTMATRIXx | 
|  | { | 
|  | public: | 
|  | int* operator [] ( const int Row ) | 
|  | { | 
|  | return &f[Row<<2]; | 
|  | } | 
|  | int f[16]; | 
|  | }; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @class     PVRTMATRIX3f | 
|  | @brief     3x3 floating point matrix | 
|  | *****************************************************************************/ | 
|  |  | 
|  | class PVRTMATRIX3f | 
|  | { | 
|  | public: | 
|  | float* operator [] ( const int Row ) | 
|  | { | 
|  | return &f[Row*3]; | 
|  | } | 
|  | float f[9];	/*!< Array of float */ | 
|  | }; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @class     PVRTMATRIX3x | 
|  | @brief     3x3 fixed point matrix | 
|  | *****************************************************************************/ | 
|  | class PVRTMATRIX3x | 
|  | { | 
|  | public: | 
|  | int* operator [] ( const int Row ) | 
|  | { | 
|  | return &f[Row*3]; | 
|  | } | 
|  | int f[9]; | 
|  | }; | 
|  |  | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Float or fixed | 
|  | ****************************************************************************/ | 
|  | #ifdef PVRT_FIXED_POINT_ENABLE | 
|  | typedef PVRTVECTOR2x		PVRTVECTOR2; | 
|  | typedef PVRTVECTOR3x		PVRTVECTOR3; | 
|  | typedef PVRTVECTOR4x		PVRTVECTOR4; | 
|  | typedef PVRTMATRIX3x		PVRTMATRIX3; | 
|  | typedef PVRTMATRIXx			PVRTMATRIX; | 
|  | #define PVRTMatrixIdentity					PVRTMatrixIdentityX | 
|  | #define PVRTMatrixMultiply					PVRTMatrixMultiplyX | 
|  | #define PVRTMatrixTranslation				PVRTMatrixTranslationX | 
|  | #define PVRTMatrixScaling					PVRTMatrixScalingX | 
|  | #define PVRTMatrixRotationX					PVRTMatrixRotationXX | 
|  | #define PVRTMatrixRotationY					PVRTMatrixRotationYX | 
|  | #define PVRTMatrixRotationZ					PVRTMatrixRotationZX | 
|  | #define PVRTMatrixTranspose					PVRTMatrixTransposeX | 
|  | #define PVRTMatrixInverse					PVRTMatrixInverseX | 
|  | #define PVRTMatrixInverseEx					PVRTMatrixInverseExX | 
|  | #define PVRTMatrixLookAtLH					PVRTMatrixLookAtLHX | 
|  | #define PVRTMatrixLookAtRH					PVRTMatrixLookAtRHX | 
|  | #define PVRTMatrixPerspectiveFovLH			PVRTMatrixPerspectiveFovLHX | 
|  | #define PVRTMatrixPerspectiveFovRH			PVRTMatrixPerspectiveFovRHX | 
|  | #define PVRTMatrixOrthoLH					PVRTMatrixOrthoLHX | 
|  | #define PVRTMatrixOrthoRH					PVRTMatrixOrthoRHX | 
|  | #define PVRTMatrixVec3Lerp					PVRTMatrixVec3LerpX | 
|  | #define PVRTMatrixVec3DotProduct			PVRTMatrixVec3DotProductX | 
|  | #define PVRTMatrixVec3CrossProduct			PVRTMatrixVec3CrossProductX | 
|  | #define PVRTMatrixVec3Normalize				PVRTMatrixVec3NormalizeX | 
|  | #define PVRTMatrixVec3Length				PVRTMatrixVec3LengthX | 
|  | #define PVRTMatrixLinearEqSolve				PVRTMatrixLinearEqSolveX | 
|  | #else | 
|  | typedef PVRTVECTOR2f		PVRTVECTOR2; | 
|  | typedef PVRTVECTOR3f		PVRTVECTOR3; | 
|  | typedef PVRTVECTOR4f		PVRTVECTOR4; | 
|  | typedef PVRTMATRIX3f		PVRTMATRIX3; | 
|  | typedef PVRTMATRIXf			PVRTMATRIX; | 
|  | #define PVRTMatrixIdentity					PVRTMatrixIdentityF | 
|  | #define PVRTMatrixMultiply					PVRTMatrixMultiplyF | 
|  | #define PVRTMatrixTranslation				PVRTMatrixTranslationF | 
|  | #define PVRTMatrixScaling					PVRTMatrixScalingF | 
|  | #define PVRTMatrixRotationX					PVRTMatrixRotationXF | 
|  | #define PVRTMatrixRotationY					PVRTMatrixRotationYF | 
|  | #define PVRTMatrixRotationZ					PVRTMatrixRotationZF | 
|  | #define PVRTMatrixTranspose					PVRTMatrixTransposeF | 
|  | #define PVRTMatrixInverse					PVRTMatrixInverseF | 
|  | #define PVRTMatrixInverseEx					PVRTMatrixInverseExF | 
|  | #define PVRTMatrixLookAtLH					PVRTMatrixLookAtLHF | 
|  | #define PVRTMatrixLookAtRH					PVRTMatrixLookAtRHF | 
|  | #define PVRTMatrixPerspectiveFovLH			PVRTMatrixPerspectiveFovLHF | 
|  | #define PVRTMatrixPerspectiveFovRH			PVRTMatrixPerspectiveFovRHF | 
|  | #define PVRTMatrixOrthoLH					PVRTMatrixOrthoLHF | 
|  | #define PVRTMatrixOrthoRH					PVRTMatrixOrthoRHF | 
|  | #define PVRTMatrixVec3Lerp					PVRTMatrixVec3LerpF | 
|  | #define PVRTMatrixVec3DotProduct			PVRTMatrixVec3DotProductF | 
|  | #define PVRTMatrixVec3CrossProduct			PVRTMatrixVec3CrossProductF | 
|  | #define PVRTMatrixVec3Normalize				PVRTMatrixVec3NormalizeF | 
|  | #define PVRTMatrixVec3Length				PVRTMatrixVec3LengthF | 
|  | #define PVRTMatrixLinearEqSolve				PVRTMatrixLinearEqSolveF | 
|  | #endif | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Functions | 
|  | ****************************************************************************/ | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixIdentityF | 
|  | @param[out]			mOut	Set to identity | 
|  | @brief      		Reset matrix to identity matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixIdentityF(PVRTMATRIXf &mOut); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixIdentityX | 
|  | @param[out]			mOut	Set to identity | 
|  | @brief      		Reset matrix to identity matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixIdentityX(PVRTMATRIXx &mOut); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixMultiplyF | 
|  | @param[out]			mOut	Result of mA x mB | 
|  | @param[in]				mA		First operand | 
|  | @param[in]				mB		Second operand | 
|  | @brief      		Multiply mA by mB and assign the result to mOut | 
|  | (mOut = p1 * p2). A copy of the result matrix is done in | 
|  | the function because mOut can be a parameter mA or mB. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixMultiplyF( | 
|  | PVRTMATRIXf			&mOut, | 
|  | const PVRTMATRIXf	&mA, | 
|  | const PVRTMATRIXf	&mB); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixMultiplyX | 
|  | @param[out]			mOut	Result of mA x mB | 
|  | @param[in]				mA		First operand | 
|  | @param[in]				mB		Second operand | 
|  | @brief      		Multiply mA by mB and assign the result to mOut | 
|  | (mOut = p1 * p2). A copy of the result matrix is done in | 
|  | the function because mOut can be a parameter mA or mB. | 
|  | The fixed-point shift could be performed after adding | 
|  | all four intermediate results together however this might | 
|  | cause some overflow issues. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixMultiplyX( | 
|  | PVRTMATRIXx			&mOut, | 
|  | const PVRTMATRIXx	&mA, | 
|  | const PVRTMATRIXx	&mB); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixTranslationF | 
|  | @param[out]			mOut	Translation matrix | 
|  | @param[in]				fX		X component of the translation | 
|  | @param[in]				fY		Y component of the translation | 
|  | @param[in]				fZ		Z component of the translation | 
|  | @brief      		Build a transaltion matrix mOut using fX, fY and fZ. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixTranslationF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float	fX, | 
|  | const float	fY, | 
|  | const float	fZ); | 
|  | /*!*************************************************************************** | 
|  | @fn        		PVRTMatrixTranslationX | 
|  | @param[out]			mOut	Translation matrix | 
|  | @param[in]				fX		X component of the translation | 
|  | @param[in]				fY		Y component of the translation | 
|  | @param[in]				fZ		Z component of the translation | 
|  | @brief      		Build a transaltion matrix mOut using fX, fY and fZ. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixTranslationX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	fX, | 
|  | const int	fY, | 
|  | const int	fZ); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixScalingF | 
|  | @param[out]			mOut	Scale matrix | 
|  | @param[in]				fX		X component of the scaling | 
|  | @param[in]				fY		Y component of the scaling | 
|  | @param[in]				fZ		Z component of the scaling | 
|  | @brief      		Build a scale matrix mOut using fX, fY and fZ. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixScalingF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float fX, | 
|  | const float fY, | 
|  | const float fZ); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixScalingX | 
|  | @param[out]			mOut	Scale matrix | 
|  | @param[in]				fX		X component of the scaling | 
|  | @param[in]				fY		Y component of the scaling | 
|  | @param[in]				fZ		Z component of the scaling | 
|  | @brief      		Build a scale matrix mOut using fX, fY and fZ. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixScalingX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	fX, | 
|  | const int	fY, | 
|  | const int	fZ); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixRotationXF | 
|  | @param[out]			mOut	Rotation matrix | 
|  | @param[in]				fAngle	Angle of the rotation | 
|  | @brief      		Create an X rotation matrix mOut. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixRotationXF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float fAngle); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixRotationXX | 
|  | @param[out]			mOut	Rotation matrix | 
|  | @param[in]				fAngle	Angle of the rotation | 
|  | @brief      		Create an X rotation matrix mOut. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixRotationXX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	fAngle); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixRotationYF | 
|  | @param[out]			mOut	Rotation matrix | 
|  | @param[in]				fAngle	Angle of the rotation | 
|  | @brief      		Create an Y rotation matrix mOut. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixRotationYF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float fAngle); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixRotationYX | 
|  | @param[out]			mOut	Rotation matrix | 
|  | @param[in]				fAngle	Angle of the rotation | 
|  | @brief      		Create an Y rotation matrix mOut. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixRotationYX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	fAngle); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixRotationZF | 
|  | @param[out]			mOut	Rotation matrix | 
|  | @param[in]				fAngle	Angle of the rotation | 
|  | @brief      		Create an Z rotation matrix mOut. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixRotationZF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float fAngle); | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixRotationZX | 
|  | @param[out]			mOut	Rotation matrix | 
|  | @param[in]				fAngle	Angle of the rotation | 
|  | @brief      		Create an Z rotation matrix mOut. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixRotationZX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	fAngle); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixTransposeF | 
|  | @param[out]			mOut	Transposed matrix | 
|  | @param[in]				mIn		Original matrix | 
|  | @brief      		Compute the transpose matrix of mIn. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixTransposeF( | 
|  | PVRTMATRIXf			&mOut, | 
|  | const PVRTMATRIXf	&mIn); | 
|  | /*!*************************************************************************** | 
|  | @fn           		PVRTMatrixTransposeX | 
|  | @param[out]			mOut	Transposed matrix | 
|  | @param[in]				mIn		Original matrix | 
|  | @brief      		Compute the transpose matrix of mIn. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixTransposeX( | 
|  | PVRTMATRIXx			&mOut, | 
|  | const PVRTMATRIXx	&mIn); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixInverseF | 
|  | @param[out]			mOut	Inversed matrix | 
|  | @param[in]				mIn		Original matrix | 
|  | @brief      		Compute the inverse matrix of mIn. | 
|  | The matrix must be of the form : | 
|  | A 0 | 
|  | C 1 | 
|  | Where A is a 3x3 matrix and C is a 1x3 matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixInverseF( | 
|  | PVRTMATRIXf			&mOut, | 
|  | const PVRTMATRIXf	&mIn); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixInverseX | 
|  | @param[out]			mOut	Inversed matrix | 
|  | @param[in]				mIn		Original matrix | 
|  | @brief      		Compute the inverse matrix of mIn. | 
|  | The matrix must be of the form : | 
|  | A 0 | 
|  | C 1 | 
|  | Where A is a 3x3 matrix and C is a 1x3 matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixInverseX( | 
|  | PVRTMATRIXx			&mOut, | 
|  | const PVRTMATRIXx	&mIn); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixInverseExF | 
|  | @param[out]			mOut	Inversed matrix | 
|  | @param[in]				mIn		Original matrix | 
|  | @brief      		Compute the inverse matrix of mIn. | 
|  | Uses a linear equation solver and the knowledge that M.M^-1=I. | 
|  | Use this fn to calculate the inverse of matrices that | 
|  | PVRTMatrixInverse() cannot. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixInverseExF( | 
|  | PVRTMATRIXf			&mOut, | 
|  | const PVRTMATRIXf	&mIn); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixInverseExX | 
|  | @param[out]			mOut	Inversed matrix | 
|  | @param[in]				mIn		Original matrix | 
|  | @brief      		Compute the inverse matrix of mIn. | 
|  | Uses a linear equation solver and the knowledge that M.M^-1=I. | 
|  | Use this fn to calculate the inverse of matrices that | 
|  | PVRTMatrixInverse() cannot. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixInverseExX( | 
|  | PVRTMATRIXx			&mOut, | 
|  | const PVRTMATRIXx	&mIn); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixLookAtLHF | 
|  | @param[out]			mOut	Look-at view matrix | 
|  | @param[in]				vEye	Position of the camera | 
|  | @param[in]				vAt		Point the camera is looking at | 
|  | @param[in]				vUp		Up direction for the camera | 
|  | @brief      		Create a look-at view matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixLookAtLHF( | 
|  | PVRTMATRIXf			&mOut, | 
|  | const PVRTVECTOR3f	&vEye, | 
|  | const PVRTVECTOR3f	&vAt, | 
|  | const PVRTVECTOR3f	&vUp); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixLookAtLHX | 
|  | @param[out]			mOut	Look-at view matrix | 
|  | @param[in]				vEye	Position of the camera | 
|  | @param[in]				vAt		Point the camera is looking at | 
|  | @param[in]				vUp		Up direction for the camera | 
|  | @brief      		Create a look-at view matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixLookAtLHX( | 
|  | PVRTMATRIXx			&mOut, | 
|  | const PVRTVECTOR3x	&vEye, | 
|  | const PVRTVECTOR3x	&vAt, | 
|  | const PVRTVECTOR3x	&vUp); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixLookAtRHF | 
|  | @param[out]			mOut	Look-at view matrix | 
|  | @param[in]				vEye	Position of the camera | 
|  | @param[in]				vAt		Point the camera is looking at | 
|  | @param[in]				vUp		Up direction for the camera | 
|  | @brief      		Create a look-at view matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixLookAtRHF( | 
|  | PVRTMATRIXf			&mOut, | 
|  | const PVRTVECTOR3f	&vEye, | 
|  | const PVRTVECTOR3f	&vAt, | 
|  | const PVRTVECTOR3f	&vUp); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixLookAtRHX | 
|  | @param[out]			mOut	Look-at view matrix | 
|  | @param[in]				vEye	Position of the camera | 
|  | @param[in]				vAt		Point the camera is looking at | 
|  | @param[in]				vUp		Up direction for the camera | 
|  | @brief      		Create a look-at view matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixLookAtRHX( | 
|  | PVRTMATRIXx			&mOut, | 
|  | const PVRTVECTOR3x	&vEye, | 
|  | const PVRTVECTOR3x	&vAt, | 
|  | const PVRTVECTOR3x	&vUp); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		PVRTMatrixPerspectiveFovLHF | 
|  | @param[out]		mOut		Perspective matrix | 
|  | @param[in]			fFOVy		Field of view | 
|  | @param[in]			fAspect		Aspect ratio | 
|  | @param[in]			fNear		Near clipping distance | 
|  | @param[in]			fFar		Far clipping distance | 
|  | @param[in]			bRotate		Should we rotate it ? (for upright screens) | 
|  | @brief      	Create a perspective matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixPerspectiveFovLHF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float	fFOVy, | 
|  | const float	fAspect, | 
|  | const float	fNear, | 
|  | const float	fFar, | 
|  | const bool  bRotate = false); | 
|  | /*!*************************************************************************** | 
|  | @fn      		PVRTMatrixPerspectiveFovLHX | 
|  | @param[out]		mOut		Perspective matrix | 
|  | @param[in]			fFOVy		Field of view | 
|  | @param[in]			fAspect		Aspect ratio | 
|  | @param[in]			fNear		Near clipping distance | 
|  | @param[in]			fFar		Far clipping distance | 
|  | @param[in]			bRotate		Should we rotate it ? (for upright screens) | 
|  | @brief      	Create a perspective matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixPerspectiveFovLHX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	fFOVy, | 
|  | const int	fAspect, | 
|  | const int	fNear, | 
|  | const int	fFar, | 
|  | const bool  bRotate = false); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		PVRTMatrixPerspectiveFovRHF | 
|  | @param[out]		mOut		Perspective matrix | 
|  | @param[in]			fFOVy		Field of view | 
|  | @param[in]			fAspect		Aspect ratio | 
|  | @param[in]			fNear		Near clipping distance | 
|  | @param[in]			fFar		Far clipping distance | 
|  | @param[in]			bRotate		Should we rotate it ? (for upright screens) | 
|  | @brief      	Create a perspective matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixPerspectiveFovRHF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float	fFOVy, | 
|  | const float	fAspect, | 
|  | const float	fNear, | 
|  | const float	fFar, | 
|  | const bool  bRotate = false); | 
|  | /*!*************************************************************************** | 
|  | @fn      		PVRTMatrixPerspectiveFovRHX | 
|  | @param[out]		mOut		Perspective matrix | 
|  | @param[in]			fFOVy		Field of view | 
|  | @param[in]			fAspect		Aspect ratio | 
|  | @param[in]			fNear		Near clipping distance | 
|  | @param[in]			fFar		Far clipping distance | 
|  | @param[in]			bRotate		Should we rotate it ? (for upright screens) | 
|  | @brief      	Create a perspective matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixPerspectiveFovRHX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	fFOVy, | 
|  | const int	fAspect, | 
|  | const int	fNear, | 
|  | const int	fFar, | 
|  | const bool  bRotate = false); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		PVRTMatrixOrthoLHF | 
|  | @param[out]		mOut		Orthographic matrix | 
|  | @param[in]			w			Width of the screen | 
|  | @param[in]			h			Height of the screen | 
|  | @param[in]			zn			Near clipping distance | 
|  | @param[in]			zf			Far clipping distance | 
|  | @param[in]			bRotate		Should we rotate it ? (for upright screens) | 
|  | @brief      	Create an orthographic matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixOrthoLHF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float w, | 
|  | const float h, | 
|  | const float zn, | 
|  | const float zf, | 
|  | const bool  bRotate = false); | 
|  | /*!*************************************************************************** | 
|  | @fn      		PVRTMatrixOrthoLHX | 
|  | @param[out]		mOut		Orthographic matrix | 
|  | @param[in]			w			Width of the screen | 
|  | @param[in]			h			Height of the screen | 
|  | @param[in]			zn			Near clipping distance | 
|  | @param[in]			zf			Far clipping distance | 
|  | @param[in]			bRotate		Should we rotate it ? (for upright screens) | 
|  | @brief      	Create an orthographic matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixOrthoLHX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	w, | 
|  | const int	h, | 
|  | const int	zn, | 
|  | const int	zf, | 
|  | const bool  bRotate = false); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		PVRTMatrixOrthoRHF | 
|  | @param[out]		mOut		Orthographic matrix | 
|  | @param[in]			w			Width of the screen | 
|  | @param[in]			h			Height of the screen | 
|  | @param[in]			zn			Near clipping distance | 
|  | @param[in]			zf			Far clipping distance | 
|  | @param[in]			bRotate		Should we rotate it ? (for upright screens) | 
|  | @brief      	Create an orthographic matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixOrthoRHF( | 
|  | PVRTMATRIXf	&mOut, | 
|  | const float w, | 
|  | const float h, | 
|  | const float zn, | 
|  | const float zf, | 
|  | const bool  bRotate = false); | 
|  | /*!*************************************************************************** | 
|  | @fn      		PVRTMatrixOrthoRHX | 
|  | @param[out]		mOut		Orthographic matrix | 
|  | @param[in]			w			Width of the screen | 
|  | @param[in]			h			Height of the screen | 
|  | @param[in]			zn			Near clipping distance | 
|  | @param[in]			zf			Far clipping distance | 
|  | @param[in]			bRotate		Should we rotate it ? (for upright screens) | 
|  | @brief      	Create an orthographic matrix. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixOrthoRHX( | 
|  | PVRTMATRIXx	&mOut, | 
|  | const int	w, | 
|  | const int	h, | 
|  | const int	zn, | 
|  | const int	zf, | 
|  | const bool  bRotate = false); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3LerpF | 
|  | @param[out]			vOut	Result of the interpolation | 
|  | @param[in]				v1		First vector to interpolate from | 
|  | @param[in]				v2		Second vector to interpolate form | 
|  | @param[in]				s		Coefficient of interpolation | 
|  | @brief      		This function performs the linear interpolation based on | 
|  | the following formula: V1 + s(V2-V1). | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixVec3LerpF( | 
|  | PVRTVECTOR3f		&vOut, | 
|  | const PVRTVECTOR3f	&v1, | 
|  | const PVRTVECTOR3f	&v2, | 
|  | const float			s); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3LerpX | 
|  | @param[out]			vOut	Result of the interpolation | 
|  | @param[in]				v1		First vector to interpolate from | 
|  | @param[in]				v2		Second vector to interpolate form | 
|  | @param[in]				s		Coefficient of interpolation | 
|  | @brief      		This function performs the linear interpolation based on | 
|  | the following formula: V1 + s(V2-V1). | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixVec3LerpX( | 
|  | PVRTVECTOR3x		&vOut, | 
|  | const PVRTVECTOR3x	&v1, | 
|  | const PVRTVECTOR3x	&v2, | 
|  | const int			s); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3DotProductF | 
|  | @param[in]				v1		First vector | 
|  | @param[in]				v2		Second vector | 
|  | @return			Dot product of the two vectors. | 
|  | @brief      		This function performs the dot product of the two | 
|  | supplied vectors. | 
|  | *****************************************************************************/ | 
|  | float PVRTMatrixVec3DotProductF( | 
|  | const PVRTVECTOR3f	&v1, | 
|  | const PVRTVECTOR3f	&v2); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3DotProductX | 
|  | @param[in]				v1		First vector | 
|  | @param[in]				v2		Second vector | 
|  | @return			Dot product of the two vectors. | 
|  | @brief      		This function performs the dot product of the two | 
|  | supplied vectors. | 
|  | A single >> 16 shift could be applied to the final accumulated | 
|  | result however this runs the risk of overflow between the | 
|  | results of the intermediate additions. | 
|  | *****************************************************************************/ | 
|  | int PVRTMatrixVec3DotProductX( | 
|  | const PVRTVECTOR3x	&v1, | 
|  | const PVRTVECTOR3x	&v2); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3CrossProductF | 
|  | @param[out]			vOut	Cross product of the two vectors | 
|  | @param[in]				v1		First vector | 
|  | @param[in]				v2		Second vector | 
|  | @brief      		This function performs the cross product of the two | 
|  | supplied vectors. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixVec3CrossProductF( | 
|  | PVRTVECTOR3f		&vOut, | 
|  | const PVRTVECTOR3f	&v1, | 
|  | const PVRTVECTOR3f	&v2); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3CrossProductX | 
|  | @param[out]			vOut	Cross product of the two vectors | 
|  | @param[in]				v1		First vector | 
|  | @param[in]				v2		Second vector | 
|  | @brief      		This function performs the cross product of the two | 
|  | supplied vectors. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixVec3CrossProductX( | 
|  | PVRTVECTOR3x		&vOut, | 
|  | const PVRTVECTOR3x	&v1, | 
|  | const PVRTVECTOR3x	&v2); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3NormalizeF | 
|  | @param[out]			vOut	Normalized vector | 
|  | @param[in]				vIn		Vector to normalize | 
|  | @brief      		Normalizes the supplied vector. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixVec3NormalizeF( | 
|  | PVRTVECTOR3f		&vOut, | 
|  | const PVRTVECTOR3f	&vIn); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3NormalizeX | 
|  | @param[out]			vOut	Normalized vector | 
|  | @param[in]				vIn		Vector to normalize | 
|  | @brief      		Normalizes the supplied vector. | 
|  | The square root function is currently still performed | 
|  | in floating-point. | 
|  | Original vector is scaled down prior to be normalized in | 
|  | order to avoid overflow issues. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixVec3NormalizeX( | 
|  | PVRTVECTOR3x		&vOut, | 
|  | const PVRTVECTOR3x	&vIn); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3LengthF | 
|  | @param[in]				vIn		Vector to get the length of | 
|  | @return			The length of the vector | 
|  | @brief      		Gets the length of the supplied vector. | 
|  | *****************************************************************************/ | 
|  | float PVRTMatrixVec3LengthF( | 
|  | const PVRTVECTOR3f	&vIn); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixVec3LengthX | 
|  | @param[in]				vIn		Vector to get the length of | 
|  | @return			The length of the vector | 
|  | @brief      		Gets the length of the supplied vector | 
|  | *****************************************************************************/ | 
|  | int PVRTMatrixVec3LengthX( | 
|  | const PVRTVECTOR3x	&vIn); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixLinearEqSolveF | 
|  | @param[in]				pSrc	2D array of floats. 4 Eq linear problem is 5x4 | 
|  | matrix, constants in first column | 
|  | @param[in]				nCnt	Number of equations to solve | 
|  | @param[out]			pRes	Result | 
|  | @brief      		Solves 'nCnt' simultaneous equations of 'nCnt' variables. | 
|  | pRes should be an array large enough to contain the | 
|  | results: the values of the 'nCnt' variables. | 
|  | This fn recursively uses Gaussian Elimination. | 
|  | *****************************************************************************/ | 
|  |  | 
|  | void PVRTMatrixLinearEqSolveF( | 
|  | float		* const pRes, | 
|  | float		** const pSrc, | 
|  | const int	nCnt); | 
|  | /*!*************************************************************************** | 
|  | @fn      			PVRTMatrixLinearEqSolveX | 
|  | @param[in]				pSrc	2D array of floats. 4 Eq linear problem is 5x4 | 
|  | matrix, constants in first column | 
|  | @param[in]				nCnt	Number of equations to solve | 
|  | @param[out]			pRes	Result | 
|  | @brief      		Solves 'nCnt' simultaneous equations of 'nCnt' variables. | 
|  | pRes should be an array large enough to contain the | 
|  | results: the values of the 'nCnt' variables. | 
|  | This fn recursively uses Gaussian Elimination. | 
|  | *****************************************************************************/ | 
|  | void PVRTMatrixLinearEqSolveX( | 
|  | int			* const pRes, | 
|  | int			** const pSrc, | 
|  | const int	nCnt); | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /***************************************************************************** | 
|  | End of file (PVRTMatrix.h) | 
|  | *****************************************************************************/ | 
|  |  |