reman3/Rayman_X/cpa/public/COL/CollGOUt.h

146 lines
3.2 KiB
C

/*
MODULE : COL (Intersection & Collision Library)
AUTHOR : Frederic PHILIPPE
UBI R&D
FILE : CollGOUt.h (Geometric object collision)
*/
#ifndef COL_COLLGOUT_H
#define COL_COLLGOUT_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "cpa_expt.h"
/* For Global declaration in C files : */
#ifdef COL_GLOBALS
#define COL_EXTERN extern
#else /* !COL_GLOBALS */
#define COL_EXTERN
#endif /* !COL_GLOBALS */
/*
-----------------------------------------------------------------------------
INCLUDES FILES
-----------------------------------------------------------------------------
*/
#include "Futil.h"
#include "Box.h"
#include "Inters.h"
#include "IntersGO.h"
#include "OctreeGO.h"
/*
-----------------------------------------------------------------------------
FUNCTIONS DECLARATION
-----------------------------------------------------------------------------
*/
#define COL_M_vIntSegTriBoundReject( p_stVertexA, p_stVectAB, p_stVertex1, p_stVertex2, p_stVertex3, xCoord, xMin, xMax )\
{\
xMin = p_stVertexA->xCoord;\
if (*((long *)&(p_stVectAB->xCoord)) < 0L)\
{\
xMin += p_stVectAB->xCoord;\
}\
\
FUT_M_vMaxValue3 ( xMax, p_stVertex1->xCoord, p_stVertex2->xCoord, p_stVertex3->xCoord );\
\
if ( MTH_M_bLess ( xMax, xMin ) )\
{\
return ;\
}\
\
xMax = p_stVertexA->xCoord;\
if (*((long *)&(p_stVectAB->xCoord)) > 0L)\
{\
xMax += p_stVectAB->xCoord;\
}\
\
FUT_M_vMinValue3 ( xMin, p_stVertex1->xCoord, p_stVertex2->xCoord, p_stVertex3->xCoord );\
\
if ( MTH_M_bLess ( xMax, xMin ) )\
{\
return ;\
}\
}
#define COL_M_vIntSegSphBoundReject( p_stVertex1, p_stVect12, p_stSphereCenter, xRadius, xCoord, xMin, xMax )\
{\
xMin = p_stVertex1->xCoord;\
if (*((long *)&(p_stVect12->xCoord)) < 0L)\
{\
xMin += p_stVect12->xCoord;\
}\
\
xMax = MTH_M_xAdd ( p_stSphereCenter->xCoord, xRadius );\
\
if ( MTH_M_bLess ( xMax, xMin ) )\
{\
return ;\
}\
\
xMax = p_stVertex1->xCoord;\
if (*((long *)&(p_stVect12->xCoord)) > 0L)\
{\
xMax += p_stVect12->xCoord;\
}\
\
xMin = MTH_M_xSub ( p_stSphereCenter->xCoord, xRadius );\
\
if ( MTH_M_bLess ( xMax, xMin ) )\
{\
return ;\
}\
}
#define COL_M_vIntSegCylBoundRejection( p_stVertex1, p_stVect12, p_stVertexA, p_stVectAB, xCoord, xRadius, xMin, xMax )\
{\
xMin = p_stVertex1->xCoord;\
if (*((long *)&(p_stVect12->xCoord)) < 0L)\
{\
xMin += p_stVect12->xCoord;\
}\
\
xMax = p_stVertexA->xCoord;\
if (*((long *)&(p_stVectAB->xCoord)) > 0L)\
{\
xMax += p_stVectAB->xCoord;\
}\
\
if ( MTH_M_bLess ( MTH_M_xAdd ( xMax, xRadius ), xMin ) )\
{\
return ;\
}\
\
xMax = p_stVertex1->xCoord;\
if (*((long *)&(p_stVect12->xCoord)) > 0L)\
{\
xMax += p_stVect12->xCoord;\
}\
\
xMin = p_stVertexA->xCoord;\
if (*((long *)&(p_stVectAB->xCoord)) < 0L)\
{\
xMin += p_stVectAB->xCoord;\
}\
\
if ( MTH_M_bLess ( xMax, MTH_M_xSub ( xMin, xRadius ) ) )\
{\
return ;\
}\
}
extern CPA_EXPORT ACP_tdxBool COL_fn_bGetSurfaceInGeometricObject ( ACP_tdxHandleOfObject _hGeometricObject );
extern CPA_EXPORT ACP_tdxBool COL_fn_bGetSphereAndPointOnlyInGeometricObject ( ACP_tdxHandleOfObject _hGeometricObject );
#ifdef __cplusplus
};
#endif /* __cplusplus */
#endif /* COL_COLLGOUT_H */