summaryrefslogtreecommitdiff
path: root/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h')
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h250
1 files changed, 0 insertions, 250 deletions
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h
deleted file mode 100644
index 7e251fa71e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_HEIGHTFIELD_TERRAIN_SHAPE_H
-#define BT_HEIGHTFIELD_TERRAIN_SHAPE_H
-
-#include "btConcaveShape.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-///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).
-
- \b 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.
-
- - unsigned char: height at a point is the uchar value at the
- grid point, multipled by heightScale. uchar isn't recommended
- because of its inability to deal with negative values, and
- low resolution (8-bit).
-
- - short: height at a point is the short int value at that grid
- point, multipled by heightScale.
-
- - float or dobule: height at a point is the value at that grid point.
-
- 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.
- */
-ATTRIBUTE_ALIGNED16(class)
-btHeightfieldTerrainShape : public btConcaveShape
-{
-public:
- struct Range
- {
- Range() {}
- Range(btScalar min, btScalar max) : min(min), max(max) {}
-
- bool overlaps(const Range& other) const
- {
- return !(min > other.max || max < other.min);
- }
-
- btScalar min;
- btScalar max;
- };
-
-protected:
- btVector3 m_localAabbMin;
- btVector3 m_localAabbMax;
- btVector3 m_localOrigin;
-
- ///terrain data
- int m_heightStickWidth;
- int m_heightStickLength;
- btScalar m_minHeight;
- btScalar m_maxHeight;
- btScalar m_width;
- btScalar m_length;
- btScalar m_heightScale;
- union {
- const unsigned char* m_heightfieldDataUnsignedChar;
- const short* m_heightfieldDataShort;
- const float* m_heightfieldDataFloat;
- const double* m_heightfieldDataDouble;
- const void* m_heightfieldDataUnknown;
- };
-
- PHY_ScalarType m_heightDataType;
- bool m_flipQuadEdges;
- bool m_useDiamondSubdivision;
- bool m_useZigzagSubdivision;
- bool m_flipTriangleWinding;
- int m_upAxis;
-
- btVector3 m_localScaling;
-
- // Accelerator
- btAlignedObjectArray<Range> m_vboundsGrid;
- int m_vboundsGridWidth;
- int m_vboundsGridLength;
- int m_vboundsChunkSize;
-
-
- btScalar m_userValue3;
-
- struct btTriangleInfoMap* m_triangleInfoMap;
-
- virtual btScalar getRawHeightFieldValue(int x, int y) const;
- void quantizeWithClamp(int* out, const btVector3& point, int isMax) const;
-
- /// protected initialization
- /**
- Handles the work of constructors so that public constructors can be
- backwards-compatible without a lot of copy/paste.
- */
- void initialize(int heightStickWidth, int heightStickLength,
- const void* heightfieldData, btScalar heightScale,
- btScalar minHeight, btScalar maxHeight, int upAxis,
- PHY_ScalarType heightDataType, bool flipQuadEdges);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- /// preferred constructors
- btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const float* heightfieldData, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges);
- btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const double* heightfieldData, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges);
- btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const short* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges);
- btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const unsigned char* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges);
-
- /// legacy 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.
-
- This legacy constructor considers `PHY_FLOAT` to mean `btScalar`.
- With `BT_USE_DOUBLE_PRECISION`, it will expect `heightfieldData`
- to be double-precision.
- */
- btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength,
- const void* heightfieldData, btScalar heightScale,
- btScalar minHeight, btScalar maxHeight,
- int upAxis, PHY_ScalarType heightDataType,
- bool flipQuadEdges);
-
- /// legacy constructor
- /**
- The legacy constructor assumes the heightfield has a minimum height
- of zero. Only unsigned char or btScalar data are supported. For legacy
- compatibility reasons, heightScale is calculated as maxHeight / 65535
- (and is only used when useFloatData = false).
- */
- btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength, const void* heightfieldData, btScalar maxHeight, int upAxis, bool useFloatData, bool flipQuadEdges);
-
- virtual ~btHeightfieldTerrainShape();
-
- void setUseDiamondSubdivision(bool useDiamondSubdivision = true) { m_useDiamondSubdivision = useDiamondSubdivision; }
-
- ///could help compatibility with Ogre heightfields. See https://code.google.com/p/bullet/issues/detail?id=625
- void setUseZigzagSubdivision(bool useZigzagSubdivision = true) { m_useZigzagSubdivision = useZigzagSubdivision; }
-
- void setFlipTriangleWinding(bool flipTriangleWinding)
- {
- m_flipTriangleWinding = flipTriangleWinding;
- }
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual void setLocalScaling(const btVector3& scaling);
-
- 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();
-
- int getUpAxis() const
- {
- return m_upAxis;
- }
- //debugging
- virtual const char* getName() const { return "HEIGHTFIELD"; }
-
-
- void setUserValue3(btScalar value)
- {
- m_userValue3 = value;
- }
- btScalar getUserValue3() const
- {
- return m_userValue3;
- }
- const struct btTriangleInfoMap* getTriangleInfoMap() const
- {
- return m_triangleInfoMap;
- }
- struct btTriangleInfoMap* getTriangleInfoMap()
- {
- return m_triangleInfoMap;
- }
- void setTriangleInfoMap(btTriangleInfoMap* map)
- {
- m_triangleInfoMap = map;
- }
- const unsigned char* getHeightfieldRawData() const
- {
- return m_heightfieldDataUnsignedChar;
- }
-};
-
-#endif //BT_HEIGHTFIELD_TERRAIN_SHAPE_H