diff options
Diffstat (limited to 'rwsdk/include/d3d8/rtbary.h')
-rw-r--r-- | rwsdk/include/d3d8/rtbary.h | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/rwsdk/include/d3d8/rtbary.h b/rwsdk/include/d3d8/rtbary.h new file mode 100644 index 00000000..61c39b07 --- /dev/null +++ b/rwsdk/include/d3d8/rtbary.h @@ -0,0 +1,141 @@ +/*************************************************************************** + * * + * Module : rtbary.h * + * * + * Purpose : Barycentric operations * + * * + **************************************************************************/ + +#ifndef RTBARY_H +#define RTBARY_H + +/** + * \defgroup rtbary RtBary + * \ingroup rttool + * + * Barycentric Toolkit for RenderWare. + */ + + +/**************************************************************************** + Includes + */ + +#include <rwcore.h> + +#include <rtbary.rpe> /* automatically generated header file */ + + +/**************************************************************************** + Global types + */ + +/** + * \ingroup rtbary + * \typedef RtBaryV4d + * typedef for the 4 element homogeneous row of a transform matrix mapping + * a point from Cartesian space to the barycentric space defined by a triangle. + */ +typedef RwReal RtBaryV4d[4]; + +/** + * \ingroup rtbary + * \typedef RtBaryTransform + * typedef for the 4x4 homogeneous transform matrix mapping a point + * from Cartesian space to the barycentric space defined by a triangle. + */ +typedef RtBaryV4d RtBaryTransform[4]; + +/**************************************************************************** + Defines + */ + +#define RtBaryV3dFromWeightsMacro(_out, _b, _v0, _v1, _v2) \ +MACRO_START \ +{ \ + (_out)->x = (RwReal)( ((_v0)->x * (_b)[0]) + \ + ((_v1)->x * (_b)[1]) + \ + ((_v2)->x * (_b)[2]) ); \ + (_out)->y = (RwReal)( ((_v0)->y * (_b)[0]) + \ + ((_v1)->y * (_b)[1]) + \ + ((_v2)->y * (_b)[2]) ); \ + (_out)->z = (RwReal)( ((_v0)->z * (_b)[0]) + \ + ((_v1)->z * (_b)[1]) + \ + ((_v2)->z * (_b)[2]) ); \ +} \ +MACRO_STOP + +#define RtBaryWeightsFromV3dMacro(_out, _m, _in) \ +MACRO_START \ +{ \ + (_out)[0] = ( (_m)[0][0] * (_in)->x + \ + (_m)[1][0] * (_in)->y + \ + (_m)[2][0] * (_in)->z + \ + (_m)[3][0] ); \ + (_out)[1] = ( (_m)[0][1] * (_in)->x + \ + (_m)[1][1] * (_in)->y + \ + (_m)[2][1] * (_in)->z + \ + (_m)[3][1] ); \ + (_out)[2] = ( (_m)[0][2] * (_in)->x + \ + (_m)[1][2] * (_in)->y + \ + (_m)[2][2] * (_in)->z + \ + (_m)[3][2] ); \ + (_out)[3] = ( (_m)[0][3] * (_in)->x + \ + (_m)[1][3] * (_in)->y + \ + (_m)[2][3] * (_in)->z + \ + (_m)[3][3] ); \ +} \ +MACRO_STOP + +#if (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )) + +#define RtBaryV3dFromWeights(_out, _b, _v0, _v1, _v2) \ + RtBaryV3dFromWeightsMacro(_out, _b, _v0, _v1, _v2) + +#define RtBaryWeightsFromV3d(_out, _m, _in) \ + RtBaryWeightsFromV3dMacro(_out, _m, _in) + +#endif /* (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )) */ + +/**************************************************************************** + Function prototypes + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +extern RwBool +RtBaryGetTransform(RtBaryTransform m, + RwReal * const area, + const RwV3d * const v0, + const RwV3d * const v1, + const RwV3d * const v2); + +#if ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) ) + +extern void +RtBaryV3dFromWeights(RwV3d * const out, + const RtBaryV4d weights, + const RwV3d * const v0, + const RwV3d * const v1, + const RwV3d * const v2); + +extern void +RtBaryWeightsFromV3d(RtBaryV4d out, + RtBaryTransform mat, + const RwV3d * const in); + +extern void +_rtImportWorldBaryFromEdge(RtBaryV4d out, + RtBaryTransform mat, + const RwV3d * const in); + +#endif /* ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) ) */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* RTBARY_H */ |