Blender V2.61 - r43446
|
btHeightfieldTerrainShape simulates a 2D heightfield terrain More...
#include <btHeightfieldTerrainShape.h>
Public Member Functions | |
btHeightfieldTerrainShape (int heightStickWidth, int heightStickLength, void *heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis, PHY_ScalarType heightDataType, bool flipQuadEdges) | |
preferred constructor | |
btHeightfieldTerrainShape (int heightStickWidth, int heightStickLength, void *heightfieldData, btScalar maxHeight, int upAxis, bool useFloatData, bool flipQuadEdges) | |
legacy constructor | |
virtual | ~btHeightfieldTerrainShape () |
void | setUseDiamondSubdivision (bool useDiamondSubdivision=true) |
virtual void | getAabb (const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const |
getAabb returns the axis aligned bounding box in the coordinate frame of the given transform t. | |
virtual void | processAllTriangles (btTriangleCallback *callback, const btVector3 &aabbMin, const btVector3 &aabbMax) const |
process all triangles within the provided axis-aligned bounding box | |
virtual void | calculateLocalInertia (btScalar mass, btVector3 &inertia) const |
virtual void | setLocalScaling (const btVector3 &scaling) |
virtual const btVector3 & | getLocalScaling () const |
virtual const char * | getName () const |
Protected Member Functions | |
virtual btScalar | getRawHeightFieldValue (int x, int y) const |
void | quantizeWithClamp (int *out, const btVector3 &point, int isMax) const |
given input vector, return quantized version | |
void | getVertex (int x, int y, btVector3 &vertex) const |
this returns the vertex in bullet-local coordinates | |
void | initialize (int heightStickWidth, int heightStickLength, void *heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis, PHY_ScalarType heightDataType, bool flipQuadEdges) |
protected initialization | |
Protected Attributes | |
btVector3 | m_localAabbMin |
btVector3 | m_localAabbMax |
btVector3 | m_localOrigin |
int | m_heightStickWidth |
terrain data | |
int | m_heightStickLength |
btScalar | m_minHeight |
btScalar | m_maxHeight |
btScalar | m_width |
btScalar | m_length |
btScalar | m_heightScale |
union { | |
unsigned char * m_heightfieldDataUnsignedChar | |
short * m_heightfieldDataShort | |
btScalar * m_heightfieldDataFloat | |
void * m_heightfieldDataUnknown | |
}; | |
PHY_ScalarType | m_heightDataType |
bool | m_flipQuadEdges |
bool | m_useDiamondSubdivision |
int | m_upAxis |
btVector3 | m_localScaling |
btHeightfieldTerrainShape simulates a 2D heightfield terrain
The caller is responsible for maintaining the heightfield array; this class does not make a copy.
The heightfield can be dynamic so long as the min/max height values capture the extremes (heights must always be in that range).
The local origin of the heightfield is assumed to be the exact center (as determined by width and length and height, with each axis multiplied by the localScaling).
NOTE: be careful with coordinates. If you have a heightfield with a local min height of -100m, and a max height of +500m, you may be tempted to place it at the origin (0,0) and expect the heights in world coordinates to be -100 to +500 meters. Actually, the heights will be -300 to +300m, because bullet will re-center the heightfield based on its AABB (which is determined by the min/max heights). So keep in mind that once you create a btHeightfieldTerrainShape object, the heights will be adjusted relative to the center of the AABB. This is different to the behavior of many rendering engines, but is useful for physics engines.
Most (but not all) rendering and heightfield libraries assume upAxis = 1 (that is, the y-axis is "up"). This class allows any of the 3 coordinates to be "up". Make sure your choice of axis is consistent with your rendering system.
The heightfield heights are determined from the data type used for the heightfieldData array.
Whatever the caller specifies as minHeight and maxHeight will be honored. The class will not inspect the heightfield to discover the actual minimum or maximum heights. These values are used to determine the heightfield's axis-aligned bounding box, multiplied by localScaling.
For usage and testing see the TerrainDemo.
Definition at line 71 of file btHeightfieldTerrainShape.h.
btHeightfieldTerrainShape::btHeightfieldTerrainShape | ( | int | heightStickWidth, |
int | heightStickLength, | ||
void * | heightfieldData, | ||
btScalar | heightScale, | ||
btScalar | minHeight, | ||
btScalar | maxHeight, | ||
int | upAxis, | ||
PHY_ScalarType | heightDataType, | ||
bool | flipQuadEdges | ||
) |
preferred constructor
This constructor supports a range of heightfield data types, and allows for a non-zero minimum height value. heightScale is needed for any integer-based heightfield data types.
Definition at line 23 of file btHeightfieldTerrainShape.cpp.
References iTaSC::initialize().
btHeightfieldTerrainShape::btHeightfieldTerrainShape | ( | int | heightStickWidth, |
int | heightStickLength, | ||
void * | heightfieldData, | ||
btScalar | maxHeight, | ||
int | upAxis, | ||
bool | useFloatData, | ||
bool | flipQuadEdges | ||
) |
legacy constructor
The legacy constructor assumes the heightfield has a minimum height of zero. Only unsigned char or floats are supported. For legacy compatibility reasons, heightScale is calculated as maxHeight / 65535 (and is only used when useFloatData = false).
Definition at line 36 of file btHeightfieldTerrainShape.cpp.
References initialize(), PHY_FLOAT, and PHY_UCHAR.
btHeightfieldTerrainShape::~btHeightfieldTerrainShape | ( | ) | [virtual] |
Definition at line 122 of file btHeightfieldTerrainShape.cpp.
void btHeightfieldTerrainShape::calculateLocalInertia | ( | btScalar | mass, |
btVector3 & | inertia | ||
) | const [virtual] |
Implements btCollisionShape.
Definition at line 397 of file btHeightfieldTerrainShape.cpp.
void btHeightfieldTerrainShape::getAabb | ( | const btTransform & | t, |
btVector3 & | aabbMin, | ||
btVector3 & | aabbMax | ||
) | const [virtual] |
getAabb returns the axis aligned bounding box in the coordinate frame of the given transform t.
Implements btCollisionShape.
Definition at line 128 of file btHeightfieldTerrainShape.cpp.
References btMatrix3x3::absolute(), dot(), btTransform::getBasis(), btConcaveShape::getMargin(), btTransform::getOrigin(), m_localAabbMax, m_localAabbMin, m_localScaling, m_maxHeight, m_minHeight, and m_upAxis.
const btVector3 & btHeightfieldTerrainShape::getLocalScaling | ( | ) | const [virtual] |
Implements btCollisionShape.
Definition at line 408 of file btHeightfieldTerrainShape.cpp.
References m_localScaling.
virtual const char* btHeightfieldTerrainShape::getName | ( | void | ) | const [inline, virtual] |
Implements btCollisionShape.
Definition at line 157 of file btHeightfieldTerrainShape.h.
btScalar btHeightfieldTerrainShape::getRawHeightFieldValue | ( | int | x, |
int | y | ||
) | const [protected, virtual] |
This returns the "raw" (user's initial) height, not the actual height. The actual height needs to be adjusted to be relative to the center of the heightfield's AABB.
Definition at line 152 of file btHeightfieldTerrainShape.cpp.
References btAssert, m_heightDataType, m_heightfieldDataFloat, m_heightfieldDataShort, m_heightfieldDataUnsignedChar, m_heightScale, m_heightStickWidth, PHY_FLOAT, PHY_SHORT, PHY_UCHAR, and simple_enum_gen::val.
Referenced by getVertex().
void btHeightfieldTerrainShape::getVertex | ( | int | x, |
int | y, | ||
btVector3 & | vertex | ||
) | const [protected] |
this returns the vertex in bullet-local coordinates
Definition at line 190 of file btHeightfieldTerrainShape.cpp.
References btAssert, getRawHeightFieldValue(), m_heightStickLength, m_heightStickWidth, m_length, m_localOrigin, m_localScaling, m_upAxis, and m_width.
Referenced by processAllTriangles().
void btHeightfieldTerrainShape::initialize | ( | int | heightStickWidth, |
int | heightStickLength, | ||
void * | heightfieldData, | ||
btScalar | heightScale, | ||
btScalar | minHeight, | ||
btScalar | maxHeight, | ||
int | upAxis, | ||
PHY_ScalarType | heightDataType, | ||
bool | flipQuadEdges | ||
) | [protected] |
protected initialization
Handles the work of constructors so that public constructors can be backwards-compatible without a lot of copy/paste.
Definition at line 55 of file btHeightfieldTerrainShape.cpp.
References btAssert, PHY_FLOAT, PHY_SHORT, PHY_UCHAR, and TERRAIN_SHAPE_PROXYTYPE.
Referenced by btHeightfieldTerrainShape().
void btHeightfieldTerrainShape::processAllTriangles | ( | btTriangleCallback * | callback, |
const btVector3 & | aabbMin, | ||
const btVector3 & | aabbMax | ||
) | const [virtual] |
process all triangles within the provided axis-aligned bounding box
basic algorithm:
Implements btConcaveShape.
Definition at line 284 of file btHeightfieldTerrainShape.cpp.
References btAssert, getVertex(), i, m_flipQuadEdges, m_heightStickLength, m_heightStickWidth, m_localOrigin, m_localScaling, m_upAxis, m_useDiamondSubdivision, btTriangleCallback::processTriangle(), and quantizeWithClamp().
void btHeightfieldTerrainShape::quantizeWithClamp | ( | int * | out, |
const btVector3 & | point, | ||
int | isMax | ||
) | const [protected] |
given input vector, return quantized version
This routine is basically determining the gridpoint indices for a given input vector, answering the question: "which gridpoint is closest to the provided point?".
"with clamp" means that we restrict the point to be in the heightfield's axis-aligned bounding box.
Definition at line 263 of file btHeightfieldTerrainShape.cpp.
References getQuantized(), m_localAabbMax, and m_localAabbMin.
Referenced by processAllTriangles().
void btHeightfieldTerrainShape::setLocalScaling | ( | const btVector3 & | scaling | ) | [virtual] |
Implements btCollisionShape.
Definition at line 404 of file btHeightfieldTerrainShape.cpp.
References m_localScaling.
void btHeightfieldTerrainShape::setUseDiamondSubdivision | ( | bool | useDiamondSubdivision = true | ) | [inline] |
Definition at line 143 of file btHeightfieldTerrainShape.h.
References m_useDiamondSubdivision.
union { ... } [protected] |
bool btHeightfieldTerrainShape::m_flipQuadEdges [protected] |
Definition at line 95 of file btHeightfieldTerrainShape.h.
Referenced by processAllTriangles().
Definition at line 94 of file btHeightfieldTerrainShape.h.
Referenced by getRawHeightFieldValue().
Definition at line 90 of file btHeightfieldTerrainShape.h.
Referenced by getRawHeightFieldValue().
Definition at line 89 of file btHeightfieldTerrainShape.h.
Referenced by getRawHeightFieldValue().
Definition at line 91 of file btHeightfieldTerrainShape.h.
unsigned char* btHeightfieldTerrainShape::m_heightfieldDataUnsignedChar |
Definition at line 88 of file btHeightfieldTerrainShape.h.
Referenced by getRawHeightFieldValue().
btScalar btHeightfieldTerrainShape::m_heightScale [protected] |
Definition at line 85 of file btHeightfieldTerrainShape.h.
Referenced by getRawHeightFieldValue().
int btHeightfieldTerrainShape::m_heightStickLength [protected] |
Definition at line 80 of file btHeightfieldTerrainShape.h.
Referenced by getVertex(), and processAllTriangles().
int btHeightfieldTerrainShape::m_heightStickWidth [protected] |
terrain data
Definition at line 79 of file btHeightfieldTerrainShape.h.
Referenced by getRawHeightFieldValue(), getVertex(), and processAllTriangles().
btScalar btHeightfieldTerrainShape::m_length [protected] |
Definition at line 84 of file btHeightfieldTerrainShape.h.
Referenced by getVertex().
btVector3 btHeightfieldTerrainShape::m_localAabbMax [protected] |
Definition at line 75 of file btHeightfieldTerrainShape.h.
Referenced by getAabb(), and quantizeWithClamp().
btVector3 btHeightfieldTerrainShape::m_localAabbMin [protected] |
Definition at line 74 of file btHeightfieldTerrainShape.h.
Referenced by getAabb(), and quantizeWithClamp().
btVector3 btHeightfieldTerrainShape::m_localOrigin [protected] |
Definition at line 76 of file btHeightfieldTerrainShape.h.
Referenced by getVertex(), and processAllTriangles().
btVector3 btHeightfieldTerrainShape::m_localScaling [protected] |
Definition at line 100 of file btHeightfieldTerrainShape.h.
Referenced by getAabb(), getLocalScaling(), getVertex(), processAllTriangles(), and setLocalScaling().
btScalar btHeightfieldTerrainShape::m_maxHeight [protected] |
Definition at line 82 of file btHeightfieldTerrainShape.h.
Referenced by getAabb().
btScalar btHeightfieldTerrainShape::m_minHeight [protected] |
Definition at line 81 of file btHeightfieldTerrainShape.h.
Referenced by getAabb().
int btHeightfieldTerrainShape::m_upAxis [protected] |
Definition at line 98 of file btHeightfieldTerrainShape.h.
Referenced by getAabb(), getVertex(), and processAllTriangles().
bool btHeightfieldTerrainShape::m_useDiamondSubdivision [protected] |
Definition at line 96 of file btHeightfieldTerrainShape.h.
Referenced by processAllTriangles(), and setUseDiamondSubdivision().
btScalar btHeightfieldTerrainShape::m_width [protected] |
Definition at line 83 of file btHeightfieldTerrainShape.h.
Referenced by getVertex().