| /*!**************************************************************************** |
| |
| @file PVRTMisc.h |
| @copyright Copyright (c) Imagination Technologies Limited. |
| @brief Miscellaneous functions used in 3D rendering. |
| |
| ******************************************************************************/ |
| #ifndef _PVRTMISC_H_ |
| #define _PVRTMISC_H_ |
| |
| #include "PVRTMatrix.h" |
| #include "PVRTFixedPoint.h" |
| |
| /**************************************************************************** |
| ** Functions |
| ****************************************************************************/ |
| |
| /*!*************************************************************************** |
| @brief Calculates coords of the intersection of a line and an |
| infinite plane |
| @param[out] pvIntersection The point of intersection |
| @param[in] pfPlane Length 4 [A,B,C,D], values for plane equation |
| @param[in] pv0 A point on the line |
| @param[in] pv1 Another point on the line |
| *****************************************************************************/ |
| void PVRTMiscCalculateIntersectionLinePlane( |
| PVRTVECTOR3 * const pvIntersection, |
| const VERTTYPE pfPlane[4], |
| const PVRTVECTOR3 * const pv0, |
| const PVRTVECTOR3 * const pv1); |
| |
| /*!*************************************************************************** |
| @brief Calculates world-space coords of a screen-filling |
| representation of an infinite plane The resulting vertices run |
| counter-clockwise around the screen, and can be simply drawn using |
| non-indexed TRIANGLEFAN |
| @param[out] pfVtx Position of the first of 3 floats to receive |
| the position of vertex 0; up to 5 vertex positions |
| will be written (5 is the maximum number of vertices |
| required to draw an infinite polygon clipped to screen |
| and far clip plane). |
| @param[in] nStride Size of each vertex structure containing pfVtx |
| @param[in] pvPlane Length 4 [A,B,C,D], values for plane equation |
| @param[in] pmViewProjInv The inverse of the View Projection matrix |
| @param[in] pFrom Position of the camera |
| @param[in] fFar Far clipping distance |
| @return Number of vertices in the polygon fan (Can be 0, 3, 4 or 5) |
| *****************************************************************************/ |
| int PVRTMiscCalculateInfinitePlane( |
| VERTTYPE * const pfVtx, |
| const int nStride, |
| const PVRTVECTOR4 * const pvPlane, |
| const PVRTMATRIX * const pmViewProjInv, |
| const PVRTVECTOR3 * const pFrom, |
| const VERTTYPE fFar); |
| |
| /*!*************************************************************************** |
| @brief Creates the vertices and texture coordinates for a skybox |
| @param[in] scale Scale the skybox |
| @param[in] adjustUV Adjust or not UVs for PVRT compression |
| @param[in] textureSize Texture size in pixels |
| @param[out] Vertices Array of vertices |
| @param[out] UVs Array of UVs |
| *****************************************************************************/ |
| void PVRTCreateSkybox(float scale, bool adjustUV, int textureSize, VERTTYPE** Vertices, VERTTYPE** UVs); |
| |
| /*!*************************************************************************** |
| @brief Destroy the memory allocated for a skybox |
| @param[in] Vertices Vertices array to destroy |
| @param[in] UVs UVs array to destroy |
| *****************************************************************************/ |
| void PVRTDestroySkybox(VERTTYPE* Vertices, VERTTYPE* UVs); |
| |
| /*!*************************************************************************** |
| @brief When iTimesHigher is one, this function will return the closest |
| power-of-two value above the base value. |
| For every increment beyond one for the iTimesHigher value, |
| the next highest power-of-two value will be calculated. |
| @param[in] uiOriginalValue Base value |
| @param[in] iTimesHigher Multiplier |
| *****************************************************************************/ |
| unsigned int PVRTGetPOTHigher(unsigned int uiOriginalValue, int iTimesHigher); |
| |
| /*!*************************************************************************** |
| @brief When iTimesLower is one, this function will return the closest |
| power-of-two value below the base value. |
| For every increment beyond one for the iTimesLower value, |
| the next lowest power-of-two value will be calculated. The lowest |
| value that can be reached is 1. |
| @param[in] uiOriginalValue Base value |
| @param[in] iTimesLower Multiplier |
| *****************************************************************************/ |
| unsigned int PVRTGetPOTLower(unsigned int uiOriginalValue, int iTimesLower); |
| |
| #endif /* _PVRTMISC_H_ */ |
| |
| |
| /***************************************************************************** |
| End of file (PVRTMisc.h) |
| *****************************************************************************/ |
| |