19 #include <btBulletCollisionCommon.h>
22 #include <vlutil/vlSmartPointers.h>
23 #include <vlutil/vlFilename.h>
32 #include <vlutil/vlSmartPointers.h>
36 #include "vlutil/vlFilename.h"
74 virtual bool init(
const DtFilename filename,
bool displayWarning =
false);
77 virtual bool get(std::istream& stream);
84 unsigned int& characteristics,
int& position);
124 myUseSurfaceArray(false) {}
127 void addTriangleWithSurface(
const btVector3& vertex0,
const btVector3& vertex1,
const btVector3& vertex2,
128 const DtSurface& surface,
bool removeDuplicateVertices=
false);
130 DtSurface triangleSurface(
unsigned int triangleIndex)
const;
135 void initializeSurfaceArray();
139 void syncSurfaceArray();
150 typedef std::list<std::pair<btCollisionObject*, DtTriangleMeshWithSoil*> >
152 typedef std::list<std::pair<DtTriangleMeshWithSoil*, osg::Matrix> >
169 unsigned int& numTriangleOut,
const osg::Matrix& baseTransform,
170 const DtFilename& surfaceCharacterFilename =
"");
175 unsigned int& numTriangleOut,
const osg::Matrix& baseTransform,
176 const DtFilename& surfaceCharacterFilename =
"");
181 btMatrix3x3& basisA, btVector3& origin);
186 template<
typename T_Node>
190 osg::Matrix* worldMatrix = NULL,
191 const DtFilename& surfaceCharacterFilename =
"")
193 unsigned int numTriangles = 0;
194 osg::Matrix baseMatrix;
197 baseMatrix = *worldMatrix;
200 node, numTriangles, baseMatrix, surfaceCharacterFilename);
202 DtMeshTransformPairList::iterator itr = meshTransformPairs->begin();
203 DtMeshTransformPairList::iterator end = meshTransformPairs->end();
204 for(; itr != end; ++itr)
206 if (itr->first->getNumTriangles() != 0)
208 numTriangles += itr->first->getNumTriangles();
210 btCollisionObject* collisionObject =
new btCollisionObject();
211 btBvhTriangleMeshShape* terrainShape =
212 new btBvhTriangleMeshShape(itr->first,
true);
214 collisionObject->setCollisionShape(terrainShape);
218 collisionObject->setCollisionFlags(collisionObject->getCollisionFlags() & !btCollisionObject::CF_DISABLE_VISUALIZE_OBJECT);
222 collisionObject->setCollisionFlags(collisionObject->getCollisionFlags() | btCollisionObject::CF_DISABLE_VISUALIZE_OBJECT);
226 matrix = itr->second;
232 collisionObject->getWorldTransform().setBasis(basisA);
233 collisionObject->getWorldTransform().setOrigin(origin);
235 collObjMeshPairs->push_back(std::make_pair(collisionObject, itr->first));
238 delete meshTransformPairs;