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