| /*!**************************************************************************** | |
| @file PVRTTrans.h | |
| @copyright Copyright (c) Imagination Technologies Limited. | |
| @brief Set of functions used for 3D transformations and projections. | |
| ******************************************************************************/ | |
| #ifndef _PVRTTRANS_H_ | |
| #define _PVRTTRANS_H_ | |
| /**************************************************************************** | |
| ** Typedefs | |
| ****************************************************************************/ | |
| /*!*************************************************************************** | |
| @brief PVRTBOUNDINGBOX is a typedef of a PVRTBOUNDINGBOX_TAG struct. | |
| *****************************************************************************/ | |
| typedef struct PVRTBOUNDINGBOX_TAG | |
| { | |
| PVRTVECTOR3 Point[8]; ///< 8 Vertices | |
| } PVRTBOUNDINGBOX, *LPPVRTBOUNDINGBOX; | |
| /**************************************************************************** | |
| ** Functions | |
| ****************************************************************************/ | |
| /*!*************************************************************************** | |
| @fn PVRTBoundingBoxCompute | |
| @param[out] pBoundingBox | |
| @param[in] pV | |
| @param[in] nNumberOfVertices | |
| @brief Calculate the eight vertices that surround an object. | |
| This "bounding box" is used later to determine whether | |
| the object is visible or not. | |
| This function should only be called once to determine the | |
| object's bounding box. | |
| *****************************************************************************/ | |
| void PVRTBoundingBoxCompute( | |
| PVRTBOUNDINGBOX * const pBoundingBox, | |
| const PVRTVECTOR3 * const pV, | |
| const int nNumberOfVertices); | |
| /*!*************************************************************************** | |
| @fn PVRTBoundingBoxComputeInterleaved | |
| @param[out] pBoundingBox | |
| @param[in] pV | |
| @param[in] nNumberOfVertices | |
| @param[in] i32Offset | |
| @param[in] i32Stride | |
| @brief Calculate the eight vertices that surround an object. | |
| This "bounding box" is used later to determine whether | |
| the object is visible or not. | |
| This function should only be called once to determine the | |
| object's bounding box. | |
| Takes interleaved data using the first vertex's offset | |
| and the stride to the next vertex thereafter | |
| *****************************************************************************/ | |
| void PVRTBoundingBoxComputeInterleaved( | |
| PVRTBOUNDINGBOX * const pBoundingBox, | |
| const unsigned char * const pV, | |
| const int nNumberOfVertices, | |
| const int i32Offset, | |
| const int i32Stride); | |
| /*!****************************************************************************** | |
| @fn PVRTBoundingBoxIsVisible | |
| @param[out] pNeedsZClipping | |
| @param[in] pBoundingBox | |
| @param[in] pMatrix | |
| @return TRUE if the object is visible, FALSE if not. | |
| @brief Determine if a bounding box is "visible" or not along the | |
| Z axis. | |
| If the function returns TRUE, the object is visible and should | |
| be displayed (check bNeedsZClipping to know if Z Clipping needs | |
| to be done). | |
| If the function returns FALSE, the object is not visible and thus | |
| does not require to be displayed. | |
| bNeedsZClipping indicates whether the object needs Z Clipping | |
| (i.e. the object is partially visible). | |
| - *pBoundingBox is a pointer to the bounding box structure. | |
| - *pMatrix is the World, View & Projection matrices combined. | |
| - *bNeedsZClipping is TRUE if Z clipping is required. | |
| *****************************************************************************/ | |
| bool PVRTBoundingBoxIsVisible( | |
| const PVRTBOUNDINGBOX * const pBoundingBox, | |
| const PVRTMATRIX * const pMatrix, | |
| bool * const pNeedsZClipping); | |
| /*!*************************************************************************** | |
| @fn PVRTTransformVec3Array | |
| @param[out] pOut Destination for transformed vectors | |
| @param[in] nOutStride Stride between vectors in pOut array | |
| @param[in] pV Input vector array | |
| @param[in] nInStride Stride between vectors in pV array | |
| @param[in] pMatrix Matrix to transform the vectors | |
| @param[in] nNumberOfVertices Number of vectors to transform | |
| @brief Transform all vertices [X Y Z 1] in pV by pMatrix and | |
| store them in pOut. | |
| *****************************************************************************/ | |
| void PVRTTransformVec3Array( | |
| PVRTVECTOR4 * const pOut, | |
| const int nOutStride, | |
| const PVRTVECTOR3 * const pV, | |
| const int nInStride, | |
| const PVRTMATRIX * const pMatrix, | |
| const int nNumberOfVertices); | |
| /*!*************************************************************************** | |
| @fn PVRTTransformArray | |
| @param[out] pTransformedVertex Destination for transformed vectors | |
| @param[in] pV Input vector array | |
| @param[in] nNumberOfVertices Number of vectors to transform | |
| @param[in] pMatrix Matrix to transform the vectors | |
| @param[in] fW W coordinate of input vector (e.g. use 1 for position, 0 for normal) | |
| @brief Transform all vertices in pVertex by pMatrix and store them in | |
| pTransformedVertex | |
| - pTransformedVertex is the pointer that will receive transformed vertices. | |
| - pVertex is the pointer to untransformed object vertices. | |
| - nNumberOfVertices is the number of vertices of the object. | |
| - pMatrix is the matrix used to transform the object. | |
| *****************************************************************************/ | |
| void PVRTTransformArray( | |
| PVRTVECTOR3 * const pTransformedVertex, | |
| const PVRTVECTOR3 * const pV, | |
| const int nNumberOfVertices, | |
| const PVRTMATRIX * const pMatrix, | |
| const VERTTYPE fW = f2vt(1.0f)); | |
| /*!*************************************************************************** | |
| @fn PVRTTransformArrayBack | |
| @param[out] pTransformedVertex | |
| @param[in] pVertex | |
| @param[in] nNumberOfVertices | |
| @param[in] pMatrix | |
| @brief Transform all vertices in pVertex by the inverse of pMatrix | |
| and store them in pTransformedVertex. | |
| - pTransformedVertex is the pointer that will receive transformed vertices. | |
| - pVertex is the pointer to untransformed object vertices. | |
| - nNumberOfVertices is the number of vertices of the object. | |
| - pMatrix is the matrix used to transform the object. | |
| *****************************************************************************/ | |
| void PVRTTransformArrayBack( | |
| PVRTVECTOR3 * const pTransformedVertex, | |
| const PVRTVECTOR3 * const pVertex, | |
| const int nNumberOfVertices, | |
| const PVRTMATRIX * const pMatrix); | |
| /*!*************************************************************************** | |
| @fn PVRTTransformBack | |
| @param[out] pOut | |
| @param[in] pV | |
| @param[in] pM | |
| @brief Transform vertex pV by the inverse of pMatrix | |
| and store in pOut. | |
| *****************************************************************************/ | |
| void PVRTTransformBack( | |
| PVRTVECTOR4 * const pOut, | |
| const PVRTVECTOR4 * const pV, | |
| const PVRTMATRIX * const pM); | |
| /*!*************************************************************************** | |
| @fn PVRTTransform | |
| @param[out] pOut | |
| @param[in] pV | |
| @param[in] pM | |
| @brief Transform vertex pV by pMatrix and store in pOut. | |
| *****************************************************************************/ | |
| void PVRTTransform( | |
| PVRTVECTOR4 * const pOut, | |
| const PVRTVECTOR4 * const pV, | |
| const PVRTMATRIX * const pM); | |
| #endif /* _PVRTTRANS_H_ */ | |
| /***************************************************************************** | |
| End of file (PVRTTrans.h) | |
| *****************************************************************************/ | |