| /*!**************************************************************************** |
| |
| @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) |
| *****************************************************************************/ |
| |