1 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3 * OPCODE - Optimized Collision Detection
4 * Copyright (C) 2001 Pierre Terdiman
5 * Homepage: http://www.codercorner.com/Opcode.htm
7 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11 * Contains base model interface.
12 * \file OPC_BaseModel.cpp
13 * \author Pierre Terdiman
16 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
18 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
20 * The base class for collision models.
23 * \author Pierre Terdiman
27 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
29 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
33 using namespace Opcode
;
35 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
39 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
40 BaseModel::BaseModel() : mIMesh(null
), mModelCode(0), mSource(null
), mTree(null
)
44 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
48 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
49 BaseModel::~BaseModel()
54 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
56 * Releases everything.
58 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
59 void BaseModel::ReleaseBase()
61 DELETESINGLE(mSource
);
65 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
67 * Creates an optimized tree according to user-settings, and setups mModelCode.
68 * \param no_leaf [in] true for "no leaf" tree
69 * \param quantized [in] true for quantized tree
70 * \return true if success
72 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
73 bool BaseModel::CreateTree(bool no_leaf
, bool quantized
)
78 if(no_leaf
) mModelCode
|= OPC_NO_LEAF
;
79 else mModelCode
&= ~OPC_NO_LEAF
;
81 if(quantized
) mModelCode
|= OPC_QUANTIZED
;
82 else mModelCode
&= ~OPC_QUANTIZED
;
84 // Create the correct class
85 if(mModelCode
& OPC_NO_LEAF
)
87 if(mModelCode
& OPC_QUANTIZED
) mTree
= new AABBQuantizedNoLeafTree
;
88 else mTree
= new AABBNoLeafTree
;
92 if(mModelCode
& OPC_QUANTIZED
) mTree
= new AABBQuantizedTree
;
93 else mTree
= new AABBCollisionTree
;
100 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
102 * Refits the collision model. This can be used to handle dynamic meshes. Usage is:
103 * 1. modify your mesh vertices (keep the topology constant!)
104 * 2. refit the tree (call this method)
105 * \return true if success
107 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
108 bool BaseModel::Refit()
110 // Refit the optimized tree
111 return mTree
->Refit(mIMesh
);
113 // Old code kept for reference : refit the source tree then rebuild !
114 // if(!mSource) return false;
116 // mSource->Refit(&mTB);
118 // return mTree->Build(mSource);