Accelerated terrain raycast using "Bresenham" traversal and optional chunks

This commit is contained in:
Marc Gilleron
2019-01-16 20:57:21 +00:00
parent c993175a58
commit e96505d4c2
3 changed files with 490 additions and 39 deletions

View File

@@ -71,6 +71,13 @@ subject to the following restrictions:
ATTRIBUTE_ALIGNED16(class)
btHeightfieldTerrainShape : public btConcaveShape
{
public:
struct Range
{
btScalar min;
btScalar max;
};
protected:
btVector3 m_localAabbMin;
btVector3 m_localAabbMax;
@@ -100,9 +107,14 @@ protected:
btVector3 m_localScaling;
// Accelerator
Range* m_vboundsGrid;
int m_vboundsGridWidth;
int m_vboundsGridLength;
int m_vboundsChunkSize;
virtual btScalar getRawHeightFieldValue(int x, int y) const;
void quantizeWithClamp(int* out, const btVector3& point, int isMax) const;
void getVertex(int x, int y, btVector3& vertex) const;
/// protected initialization
/**
@@ -155,6 +167,13 @@ public:
virtual const btVector3& getLocalScaling() const;
void getVertex(int x, int y, btVector3& vertex) const;
void performRaycast(btTriangleCallback * callback, const btVector3& raySource, const btVector3& rayTarget) const;
void buildAccelerator(int chunkSize = 16);
void clearAccelerator();
//debugging
virtual const char* getName() const { return "HEIGHTFIELD"; }
};