![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00010 00011 #pragma once 00012 00013 #include <vantageTerrainImplementation/osgToBullet.h> 00014 #include <vantageTerrainImplementation/vantageTerrainConsoleCommands.h> 00015 #include <vantageTerrainImplementation/vantageTerrainImplementationDefines.h> 00016 #include <list> 00017 #include <vlutil/vlSmartPointers.h> 00018 #include <geometry/intersectionRecord.h> 00019 #include <tbb/spin_rw_mutex.h> 00020 00021 typedef DtBoost::shared_ptr<btCollisionObject> DtCollisionObjectSharedPtr; 00022 typedef std::multimap<DtTriangleMeshWithSoil*, btCollisionObject*> DtMeshToCollObjMMap; 00023 typedef std::map<osg::Geode*, DtTriangleMeshWithSoil*> DtGeodeToMeshMap; 00024 00025 class DtChord; 00026 class DtChordIntersectionRecord; 00027 class DtChordIntersectRecordList; 00028 class DtSphere; 00029 class DtSphereIntersectionRecord; 00030 00035 class DT_DLL_vantageTerrainImplementation DtCollisionWorld 00036 { 00037 private: 00039 00040 DtCollisionWorld(const DtCollisionWorld&); 00041 DtCollisionWorld& operator=(const DtCollisionWorld&); 00043 public: 00044 DtCollisionWorld(); 00045 virtual ~DtCollisionWorld(); 00046 00047 virtual void initialize(); 00048 00049 virtual btCollisionWorld* bulletCollisionWorld(); 00050 00051 virtual const DtMeshToCollObjMMap* const meshToCollObjMMap() const; 00052 00053 virtual void addCollisionObjectToWorld( 00054 btCollisionObject* collisionObject, DtTriangleMeshWithSoil* triangleMesh); 00055 00056 virtual void addCollisionObjectsToWorld( 00057 DtCollObjMeshPairList* collObjMeshPairs); 00058 00059 virtual unsigned int removeCollisionObjectFromWorld( 00060 btCollisionObject* collisionObject); 00061 00062 virtual bool chordIntersect(const DtChord& chord, 00063 DtChordIntersectionRecord& record, 00064 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA) const; 00065 00066 virtual bool allIntersectsAlongChord(const DtChord& chord, 00067 DtChordIntersectRecordList& intList, 00068 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA) const; 00069 00070 virtual bool sphereIntersect(const DtSphere& sphere, DtSphereIntersectionRecord& record, 00071 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA) const; 00072 00073 virtual void setDebugDrawer(btIDebugDraw* drawer); 00074 virtual void drawDebugInfo() const; 00075 00078 //If a triangle mesh has been created for the given geode 00079 //return it, otherwise 0. 00080 //virtual DtTriangleMeshWithSoil* meshForGeode(osg::Geode* geode); 00081 //virtual void addGeodeToMeshMapping(osg::Geode* geode, 00083 00084 protected: 00085 //Bullet intersection members. 00086 00087 std::set<DtTriangleMeshWithSoil*> myMeshList; 00088 //DtGeodeToMeshMap myGeodeToMeshMap; 00089 DtMeshToCollObjMMap myMeshToCollObjMMap; 00090 00091 btCollisionWorld* myCollisionWorld; 00092 btCollisionConfiguration* myCollisionConfiguration; 00093 btBroadphaseInterface* myBroadphaseInterface; 00094 btCollisionDispatcher* myCollisionDispatcher; 00095 00096 mutable tbb::spin_rw_mutex myMutex; 00097 };