Home | History | Annotate | Download | only in Tools
      1 /*!****************************************************************************
      2 
      3  @file         PVRTTrans.h
      4  @copyright    Copyright (c) Imagination Technologies Limited.
      5  @brief        Set of functions used for 3D transformations and projections.
      6 
      7 ******************************************************************************/
      8 #ifndef _PVRTTRANS_H_
      9 #define _PVRTTRANS_H_
     10 
     11 
     12 /****************************************************************************
     13 ** Typedefs
     14 ****************************************************************************/
     15 /*!***************************************************************************
     16  @brief      		PVRTBOUNDINGBOX is a typedef of a PVRTBOUNDINGBOX_TAG struct.
     17 *****************************************************************************/
     18 typedef struct PVRTBOUNDINGBOX_TAG
     19 {
     20 	PVRTVECTOR3	Point[8];       ///< 8 Vertices
     21 } PVRTBOUNDINGBOX, *LPPVRTBOUNDINGBOX;
     22 
     23 /****************************************************************************
     24 ** Functions
     25 ****************************************************************************/
     26 
     27 /*!***************************************************************************
     28  @fn       			PVRTBoundingBoxCompute
     29  @param[out]		pBoundingBox
     30  @param[in]			pV
     31  @param[in]			nNumberOfVertices
     32  @brief      		Calculate the eight vertices that surround an object.
     33 					This "bounding box" is used later to determine whether
     34 					the object is visible or not.
     35 					This function should only be called once to determine the
     36 					object's bounding box.
     37 *****************************************************************************/
     38 void PVRTBoundingBoxCompute(
     39 	PVRTBOUNDINGBOX		* const pBoundingBox,
     40 	const PVRTVECTOR3	* const pV,
     41 	const int			nNumberOfVertices);
     42 
     43 /*!***************************************************************************
     44  @fn       			PVRTBoundingBoxComputeInterleaved
     45  @param[out]		pBoundingBox
     46  @param[in]			pV
     47  @param[in]			nNumberOfVertices
     48  @param[in]			i32Offset
     49  @param[in]			i32Stride
     50  @brief      		Calculate the eight vertices that surround an object.
     51 					This "bounding box" is used later to determine whether
     52 					the object is visible or not.
     53 					This function should only be called once to determine the
     54 					object's bounding box.
     55 					Takes interleaved data using the first vertex's offset
     56 					and the stride to the next vertex thereafter
     57 *****************************************************************************/
     58 void PVRTBoundingBoxComputeInterleaved(
     59 	PVRTBOUNDINGBOX		* const pBoundingBox,
     60 	const unsigned char	* const pV,
     61 	const int			nNumberOfVertices,
     62 	const int			i32Offset,
     63 	const int			i32Stride);
     64 
     65 /*!******************************************************************************
     66  @fn       			PVRTBoundingBoxIsVisible
     67  @param[out]		pNeedsZClipping
     68  @param[in]			pBoundingBox
     69  @param[in]			pMatrix
     70  @return			TRUE if the object is visible, FALSE if not.
     71  @brief      		Determine if a bounding box is "visible" or not along the
     72 					Z axis.
     73 					If the function returns TRUE, the object is visible and should
     74 					be displayed (check bNeedsZClipping to know if Z Clipping needs
     75 					to be done).
     76 					If the function returns FALSE, the object is not visible and thus
     77 					does not require to be displayed.
     78 					bNeedsZClipping indicates whether the object needs Z Clipping
     79 					(i.e. the object is partially visible).
     80 					- *pBoundingBox is a pointer to the bounding box structure.
     81 					- *pMatrix is the World, View & Projection matrices combined.
     82 					- *bNeedsZClipping is TRUE if Z clipping is required.
     83 *****************************************************************************/
     84 bool PVRTBoundingBoxIsVisible(
     85 	const PVRTBOUNDINGBOX	* const pBoundingBox,
     86 	const PVRTMATRIX		* const pMatrix,
     87 	bool					* const pNeedsZClipping);
     88 
     89 /*!***************************************************************************
     90  @fn                PVRTTransformVec3Array
     91  @param[out]		pOut				Destination for transformed vectors
     92  @param[in]			nOutStride			Stride between vectors in pOut array
     93  @param[in]			pV					Input vector array
     94  @param[in]			nInStride			Stride between vectors in pV array
     95  @param[in]			pMatrix				Matrix to transform the vectors
     96  @param[in]			nNumberOfVertices	Number of vectors to transform
     97  @brief      		Transform all vertices [X Y Z 1] in pV by pMatrix and
     98  					store them in pOut.
     99 *****************************************************************************/
    100 void PVRTTransformVec3Array(
    101 	PVRTVECTOR4			* const pOut,
    102 	const int			nOutStride,
    103 	const PVRTVECTOR3	* const pV,
    104 	const int			nInStride,
    105 	const PVRTMATRIX	* const pMatrix,
    106 	const int			nNumberOfVertices);
    107 
    108 /*!***************************************************************************
    109  @fn       			PVRTTransformArray
    110  @param[out]		pTransformedVertex	Destination for transformed vectors
    111  @param[in]			pV					Input vector array
    112  @param[in]			nNumberOfVertices	Number of vectors to transform
    113  @param[in]			pMatrix				Matrix to transform the vectors
    114  @param[in]			fW					W coordinate of input vector (e.g. use 1 for position, 0 for normal)
    115  @brief      		Transform all vertices in pVertex by pMatrix and store them in
    116 					pTransformedVertex
    117 					- pTransformedVertex is the pointer that will receive transformed vertices.
    118 					- pVertex is the pointer to untransformed object vertices.
    119 					- nNumberOfVertices is the number of vertices of the object.
    120 					- pMatrix is the matrix used to transform the object.
    121 *****************************************************************************/
    122 void PVRTTransformArray(
    123 	PVRTVECTOR3			* const pTransformedVertex,
    124 	const PVRTVECTOR3	* const pV,
    125 	const int			nNumberOfVertices,
    126 	const PVRTMATRIX	* const pMatrix,
    127 	const VERTTYPE		fW = f2vt(1.0f));
    128 
    129 /*!***************************************************************************
    130  @fn       			PVRTTransformArrayBack
    131  @param[out]		pTransformedVertex
    132  @param[in]			pVertex
    133  @param[in]			nNumberOfVertices
    134  @param[in]			pMatrix
    135  @brief      		Transform all vertices in pVertex by the inverse of pMatrix
    136 					and store them in pTransformedVertex.
    137 					- pTransformedVertex is the pointer that will receive transformed vertices.
    138 					- pVertex is the pointer to untransformed object vertices.
    139 					- nNumberOfVertices is the number of vertices of the object.
    140 					- pMatrix is the matrix used to transform the object.
    141 *****************************************************************************/
    142 void PVRTTransformArrayBack(
    143 	PVRTVECTOR3			* const pTransformedVertex,
    144 	const PVRTVECTOR3	* const pVertex,
    145 	const int			nNumberOfVertices,
    146 	const PVRTMATRIX	* const pMatrix);
    147 
    148 /*!***************************************************************************
    149  @fn       			PVRTTransformBack
    150  @param[out]		pOut
    151  @param[in]			pV
    152  @param[in]			pM
    153  @brief      		Transform vertex pV by the inverse of pMatrix
    154 					and store in pOut.
    155 *****************************************************************************/
    156 void PVRTTransformBack(
    157 	PVRTVECTOR4			* const pOut,
    158 	const PVRTVECTOR4	* const pV,
    159 	const PVRTMATRIX	* const pM);
    160 
    161 /*!***************************************************************************
    162  @fn       			PVRTTransform
    163  @param[out]		pOut
    164  @param[in]			pV
    165  @param[in]			pM
    166  @brief      		Transform vertex pV by pMatrix and store in pOut.
    167 *****************************************************************************/
    168 void PVRTTransform(
    169 	PVRTVECTOR4			* const pOut,
    170 	const PVRTVECTOR4	* const pV,
    171 	const PVRTMATRIX	* const pM);
    172 
    173 
    174 #endif /* _PVRTTRANS_H_ */
    175 
    176 /*****************************************************************************
    177  End of file (PVRTTrans.h)
    178 *****************************************************************************/
    179 
    180