From cad28a8b35bd51857e5e43ad3aa373dd66f1037f Mon Sep 17 00:00:00 2001 From: ejcoumans Date: Wed, 27 Jun 2007 19:56:18 +0000 Subject: [PATCH] allow for float data, and prepare for 'quad edge flip', either re-use the first triangle vertex, or second (re-use index 00 or 01) --- Demos/VehicleDemo/VehicleDemo.cpp | 5 ++- .../btHeightfieldTerrainShape.cpp | 32 +++++++++++++++---- .../btHeightfieldTerrainShape.h | 18 ++++++++--- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/Demos/VehicleDemo/VehicleDemo.cpp b/Demos/VehicleDemo/VehicleDemo.cpp index bc69ad78f..4b5a01d1b 100644 --- a/Demos/VehicleDemo/VehicleDemo.cpp +++ b/Demos/VehicleDemo/VehicleDemo.cpp @@ -237,7 +237,10 @@ const float TRIANGLE_SIZE=20.f; btScalar maxHeight = 20000.f; - groundShape = new btHeightfieldTerrainShape(width,length,heightfieldData,maxHeight,upIndex); + bool useFloatDatam=false; + bool flipQuadEdges=false; + + groundShape = new btHeightfieldTerrainShape(width,length,heightfieldData,maxHeight,upIndex,useFloatDatam,flipQuadEdges); btVector3 localScaling(20,20,20); localScaling[upIndex]=1.f; groundShape->setLocalScaling(localScaling); diff --git a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp index de3f304b3..4e64aef3c 100644 --- a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp +++ b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp @@ -18,13 +18,15 @@ subject to the following restrictions: #include "LinearMath/btTransformUtil.h" -btHeightfieldTerrainShape::btHeightfieldTerrainShape(int width,int length,unsigned char* heightfieldData,btScalar maxHeight,int upAxis) +btHeightfieldTerrainShape::btHeightfieldTerrainShape(int width,int length,void* heightfieldData,btScalar maxHeight,int upAxis,bool useFloatData,bool flipQuadEdges) :m_localScaling(btScalar(1.),btScalar(1.),btScalar(1.)), m_width(width), m_length(length), -m_heightfieldData(heightfieldData), +m_heightfieldDataUnknown(heightfieldData), m_maxHeight(maxHeight), -m_upAxis(upAxis) +m_upAxis(upAxis), +m_useFloatData(useFloatData), +m_flipQuadEdges(flipQuadEdges) { @@ -108,6 +110,21 @@ void btHeightfieldTerrainShape::getAabb(const btTransform& t,btVector3& aabbMin, } +btScalar btHeightfieldTerrainShape::getHeightFieldValue(int x,int y) const +{ + btScalar val = 0.f; + if (m_useFloatData) + { + btScalar val = m_heightfieldDataFloat[(y*m_width)+x]; + } else + { + unsigned char heightFieldValue = m_heightfieldDataUnsignedChar[(y*m_width)+x]; + btScalar val = heightFieldValue* (m_maxHeight/btScalar(65535)); + } + return val; +} + + @@ -119,14 +136,15 @@ void btHeightfieldTerrainShape::getVertex(int x,int y,btVector3& vertex) const btAssert(x