00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "plane.h"
00022
00023 using namespace salt;
00024
00025 EPlaneSide Plane::ClassifyBox(const AABB3& bb) const
00026 {
00027 Vector3f posFarPt;
00028 Vector3f negFarPt;
00029
00030 if(normal.x()>0)
00031 if(normal.y()>0)
00032 if(normal.z()>0)
00033 {
00034 posFarPt.Set(bb.maxVec.x(),bb.maxVec.y(),bb.maxVec.z());
00035 negFarPt.Set(bb.minVec.x(),bb.minVec.y(),bb.minVec.z());
00036 }
00037 else
00038 {
00039 posFarPt.Set(bb.maxVec.x(),bb.maxVec.y(),bb.minVec.z());
00040 negFarPt.Set(bb.minVec.x(),bb.minVec.y(),bb.maxVec.z());
00041 }
00042 else
00043 if(normal.z()>0)
00044 {
00045 posFarPt.Set(bb.maxVec.x(),bb.minVec.y(),bb.maxVec.z());
00046 negFarPt.Set(bb.minVec.x(),bb.maxVec.y(),bb.minVec.z());
00047 }
00048 else
00049 {
00050 posFarPt.Set(bb.maxVec.x(),bb.minVec.y(),bb.minVec.z());
00051 negFarPt.Set(bb.minVec.x(),bb.maxVec.y(),bb.maxVec.z());
00052 }
00053 else
00054 if(normal.y()>0)
00055 if(normal.z()>0)
00056 {
00057 posFarPt.Set(bb.minVec.x(),bb.maxVec.y(),bb.maxVec.z());
00058 negFarPt.Set(bb.maxVec.x(),bb.minVec.y(),bb.minVec.z());
00059 }
00060 else
00061 {
00062 posFarPt.Set(bb.minVec.x(),bb.maxVec.y(),bb.minVec.z());
00063 negFarPt.Set(bb.maxVec.x(),bb.minVec.y(),bb.maxVec.z());
00064 }
00065 else
00066 if(normal.z()>0)
00067 {
00068 posFarPt.Set(bb.minVec.x(),bb.minVec.y(),bb.maxVec.z());
00069 negFarPt.Set(bb.maxVec.x(),bb.maxVec.y(),bb.minVec.z());
00070 }
00071 else
00072 {
00073 posFarPt.Set(bb.minVec.x(),bb.minVec.y(),bb.minVec.z());
00074 negFarPt.Set(bb.maxVec.x(),bb.maxVec.y(),bb.maxVec.z());
00075 }
00076
00077
00078 if (GetOrientation(negFarPt, 0.0f)==PLANESIDE_FRONT) return PLANESIDE_FRONT;
00079
00080
00081 if (GetOrientation(posFarPt, 0.0f)==PLANESIDE_BACK) return PLANESIDE_BACK;
00082
00083 return PLANESIDE_SPLIT;
00084 }
00085
00086 void Plane::Normalize()
00087 {
00088 float l=normal.Length();
00089 float iLen = 1.0f/l;
00090 normal.x()*=iLen;
00091 normal.y()*=iLen;
00092 normal.z()*=iLen;
00093 d*=iLen;
00094 }