![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2008 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: opcodeTerrainIntersector.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef opcodeTerrainIntersector_h 00013 #define opcodeTerrainIntersector_h 00014 00015 #include "gdb/terrainIntersector.h" 00016 #include "gdb/terrainIntersectorDescriptor.h" 00017 00018 class DtOpcodeTerrainIntersectorDescriptor; 00019 class DtOpcodeTerrainIntersectorImpl; 00020 00021 // Terrain intersector that uses the external OPCODE library do do terrain 00022 // intersection. This takes a little while to init(), and uses a decent 00023 // amount of memory, but results in very fast runtime intersection checks. 00024 class DT_DLL_gdb DtOpcodeTerrainIntersector : public DtTerrainIntersector 00025 { 00026 private: 00027 // Not implemented. 00028 DtOpcodeTerrainIntersector(); 00029 // Not implemented. 00030 DtOpcodeTerrainIntersector(const DtOpcodeTerrainIntersector& orig); 00031 // Not implemented. 00032 DtOpcodeTerrainIntersector& operator=(const DtOpcodeTerrainIntersector& orig); 00033 00034 public: 00035 DtOpcodeTerrainIntersector(DtTerrainDatabase* terrainDb, 00036 const DtTerrainIntersectorDescriptor* descriptor); 00037 virtual ~DtOpcodeTerrainIntersector(); 00038 00039 virtual bool init(); 00040 virtual bool reinitialize(); 00041 00042 // \return The total number of bytes of memory used by this intersector 00043 // and any of its internal indexing into the terrain. 00044 virtual unsigned int memoryUsage() const; 00045 00046 virtual bool chordIntersect(const DtChord& chord, 00047 DtChordIntersectionRecord& record, 00048 DtGdbNode::DtIntersectRecordType irtFlag = DtGdbNode::IRT_ALL_DATA_TERRAIN) const; 00049 00050 virtual bool allIntersectsAlongChord(const DtChord& chord, 00051 DtChordIntersectRecordList& intList, 00052 DtGdbNode::DtIntersectRecordType irtFlag = DtGdbNode::IRT_ALL_DATA_TERRAIN) const; 00053 00054 virtual bool sphereIntersect(const DtSphere& sphere, DtSphereIntersectionRecord& record, 00055 DtGdbNode::DtIntersectRecordType irtFlag = DtGdbNode::IRT_ALL_DATA_TERRAIN) const; 00056 00057 virtual int terrainIntersectorType() const; 00058 00059 // \return A descriptor for setting this intersector to the DtTerrainDatabase. 00060 static DtOpcodeTerrainIntersectorDescriptor* createDescriptor(); 00061 00062 // \return True if the OPCODE Intersector is valid to use on this terrain 00063 // database. Tests to see if each vertex in the database can be converted 00064 // to floating point without loosing too much precision. 00065 static bool intersectorValid(const DtTerrainDatabase* terrainDb); 00066 00067 protected: 00068 DtOpcodeTerrainIntersectorImpl* myImpl; 00069 }; 00070 00071 // Descriptor for the DtOpcodeTerrainIntersector class. 00072 class DT_DLL_gdb DtOpcodeTerrainIntersectorDescriptor : public DtTerrainIntersectorDescriptor 00073 { 00074 public: 00075 DtOpcodeTerrainIntersectorDescriptor(); 00076 DtOpcodeTerrainIntersectorDescriptor(const DtOpcodeTerrainIntersectorDescriptor& orig); 00077 virtual ~DtOpcodeTerrainIntersectorDescriptor(); 00078 00079 DtOpcodeTerrainIntersectorDescriptor& operator=(const DtOpcodeTerrainIntersectorDescriptor& orig); 00080 00081 virtual int terrainIntersectorType() const; 00082 00083 virtual void descriptorInformation(DtString& name, DtString& properties) const; 00084 00085 virtual DtTerrainIntersectorDescriptor* clone() const; 00086 }; 00087 00088 #endif