00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "std3d.h"
00027
00028 #include "3d/vegetable_clip_block.h"
00029
00030
00031 namespace NL3D
00032 {
00033
00034
00035
00036 CVegetableClipBlock::CVegetableClipBlock()
00037 {
00038 _Empty= true;
00039 _RenderNext= NULL;
00040 _NumIgs= 0;
00041 }
00042
00043
00044
00045 void CVegetableClipBlock::extendBBoxOnly(const CVector &vec)
00046 {
00047 if( !_BBox.include(vec) )
00048 {
00049 _BBox.extend(vec);
00050 }
00051 }
00052
00053
00054
00055 void CVegetableClipBlock::updateSphere()
00056 {
00057 _BSphere.Center= _BBox.getCenter();
00058 _BSphere.Radius= _BBox.getRadius();
00059 }
00060
00061
00062 void CVegetableClipBlock::extendSphere(const CVector &vec)
00063 {
00064 if(_Empty)
00065 {
00066 _Empty= false;
00067 _BBox.setCenter(vec);
00068 _BBox.setHalfSize(CVector::Null);
00069 _BSphere.Center= vec;
00070 _BSphere.Radius= 0;
00071 }
00072 else
00073 {
00074 extendBBoxOnly(vec);
00075 updateSphere();
00076 }
00077
00078 }
00079
00080
00081
00082 bool CVegetableClipBlock::clip(const std::vector<CPlane> &pyramid)
00083 {
00084 if(_Empty)
00085 return false;
00086
00087 for(uint i=0;i<pyramid.size();i++)
00088 {
00089
00090 if(!_BSphere.clipBack( pyramid[i] ))
00091 {
00092 return false;
00093 }
00094 }
00095
00096 return true;
00097 }
00098
00099
00100
00101 }