Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

coldet_bld.cpp

Go to the documentation of this file.
00001 #include "sysdep.h"
00002 #include "coldetimpl.h"
00003 
00004 __CD__BEGIN
00005 
00006 CollisionModel3D* newCollisionModel3D(bool Static)
00007 {
00008   return new CollisionModel3DImpl(Static);
00009 }
00010 
00011 CollisionModel3DImpl::CollisionModel3DImpl(bool Static)
00012 : m_Root(Vector3D::Zero, Vector3D::Zero,0),
00013   m_Transform(Matrix3D::Identity),
00014   m_InvTransform(Matrix3D::Identity),
00015   m_ColTri1(Vector3D::Zero,Vector3D::Zero,Vector3D::Zero),
00016   m_ColTri2(Vector3D::Zero,Vector3D::Zero,Vector3D::Zero),
00017   m_iColTri1(0),
00018   m_iColTri2(0),
00019   m_Final(false),
00020   m_Static(Static)
00021 {}
00022 
00023 void CollisionModel3DImpl::addTriangle(const Vector3D& v1, const Vector3D& v2, const Vector3D& v3)
00024 {
00025   if (m_Final) throw Inconsistency();
00026   m_Triangles.push_back(BoxedTriangle(v1,v2,v3));
00027 }
00028 
00029 void CollisionModel3DImpl::setTransform(const Matrix3D& m)
00030 {
00031   m_Transform=m;
00032   if (m_Static) m_InvTransform=m_Transform.Inverse();
00033 }
00034 
00035 void CollisionModel3DImpl::finalize()
00036 {
00037   if (m_Final) throw Inconsistency();
00038   // Prepare initial triangle list
00039   m_Final=true;
00040   for(unsigned i=0;i<m_Triangles.size();i++)
00041   {
00042     BoxedTriangle& bt=m_Triangles[i];
00043     m_Root.m_Boxes.push_back(&bt);
00044   }
00045   int logdepth=0;
00046   for(int num=m_Triangles.size();num>0;num>>=1,logdepth++);
00047   m_Root.m_logdepth=int(logdepth*1.5f);
00048   m_Root.divide(0);
00049 }
00050 
00051 __CD__END

Generated at Sat Nov 18 00:15:14 2000 for coldet by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000