00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef PLANE_H_INCLUDED
00027 #define PLANE_H_INCLUDED
00028
00029 #include "utility.h"
00030
00031 struct kmVec3;
00032
00033 typedef struct kmPlane {
00034 kmScalar a, b, c, d;
00035 } kmPlane;
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041 typedef enum POINT_CLASSIFICATION {
00042 POINT_INFRONT_OF_PLANE = 0,
00043 POINT_BEHIND_PLANE,
00044 POINT_ON_PLANE,
00045 } POINT_CLASSIFICATION;
00046
00047 kmScalar kmPlaneDot(const kmPlane* pP, const struct kmVec4* pV);
00048 kmScalar kmPlaneDotCoord(const kmPlane* pP, const struct kmVec3* pV);
00049 kmScalar kmPlaneDotNormal(const kmPlane* pP, const struct kmVec3* pV);
00050 kmPlane* kmPlaneFromPointNormal(kmPlane* pOut, const struct kmVec3* pPoint, const struct kmVec3* pNormal);
00051 kmPlane* kmPlaneFromPoints(kmPlane* pOut, const struct kmVec3* p1, const struct kmVec3* p2, const struct kmVec3* p3);
00052 kmVec3* kmPlaneIntersectLine(struct kmVec3* pOut, const kmPlane* pP, const struct kmVec3* pV1, const struct kmVec3* pV2);
00053 kmPlane* kmPlaneNormalize(kmPlane* pOut, const kmPlane* pP);
00054 kmPlane* kmPlaneScale(kmPlane* pOut, const kmPlane* pP, kmScalar s);
00055 POINT_CLASSIFICATION kmPlaneClassifyPoint(const kmPlane* pIn, const kmVec3* pP);
00057 #ifdef __cplusplus
00058 }
00059 #endif
00060
00061 #endif // PLANE_H_INCLUDED