18btScaledBvhTriangleMeshShape::btScaledBvhTriangleMeshShape(
btBvhTriangleMeshShape* childShape,
const btVector3& localScaling)
24btScaledBvhTriangleMeshShape::~btScaledBvhTriangleMeshShape()
32 btVector3 m_localScaling;
36 : m_originalCallback(originalCallback),
43 btVector3 newTriangle[3];
47 m_originalCallback->
processTriangle(&newTriangle[0], partId, triangleIndex);
51void btScaledBvhTriangleMeshShape::processAllTriangles(
btTriangleCallback*
callback,
const btVector3& aabbMin,
const btVector3& aabbMax)
const
56 btVector3 scaledAabbMin, scaledAabbMax;
59 scaledAabbMin[0] =
m_localScaling.getX() >= 0. ? aabbMin[0] * invLocalScaling[0] : aabbMax[0] * invLocalScaling[0];
60 scaledAabbMin[1] =
m_localScaling.getY() >= 0. ? aabbMin[1] * invLocalScaling[1] : aabbMax[1] * invLocalScaling[1];
61 scaledAabbMin[2] =
m_localScaling.getZ() >= 0. ? aabbMin[2] * invLocalScaling[2] : aabbMax[2] * invLocalScaling[2];
62 scaledAabbMin[3] = 0.f;
64 scaledAabbMax[0] =
m_localScaling.getX() <= 0. ? aabbMin[0] * invLocalScaling[0] : aabbMax[0] * invLocalScaling[0];
65 scaledAabbMax[1] =
m_localScaling.getY() <= 0. ? aabbMin[1] * invLocalScaling[1] : aabbMax[1] * invLocalScaling[1];
66 scaledAabbMax[2] =
m_localScaling.getZ() <= 0. ? aabbMin[2] * invLocalScaling[2] : aabbMax[2] * invLocalScaling[2];
67 scaledAabbMax[3] = 0.f;
69 m_bvhTriMeshShape->processAllTriangles(&scaledCallback, scaledAabbMin, scaledAabbMax);
72void btScaledBvhTriangleMeshShape::getAabb(
const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax)
const
80 localAabbMin[0] = (
m_localScaling.getX() >= 0.) ? tmpLocalAabbMin[0] : tmpLocalAabbMax[0];
81 localAabbMin[1] = (
m_localScaling.getY() >= 0.) ? tmpLocalAabbMin[1] : tmpLocalAabbMax[1];
82 localAabbMin[2] = (
m_localScaling.getZ() >= 0.) ? tmpLocalAabbMin[2] : tmpLocalAabbMax[2];
83 localAabbMax[0] = (
m_localScaling.getX() <= 0.) ? tmpLocalAabbMin[0] : tmpLocalAabbMax[0];
84 localAabbMax[1] = (
m_localScaling.getY() <= 0.) ? tmpLocalAabbMin[1] : tmpLocalAabbMax[1];
85 localAabbMax[2] = (
m_localScaling.getZ() <= 0.) ? tmpLocalAabbMin[2] : tmpLocalAabbMax[2];
87 btVector3 localHalfExtents =
btScalar(0.5) * (localAabbMax - localAabbMin);
89 localHalfExtents +=
btVector3(margin, margin, margin);
90 btVector3 localCenter =
btScalar(0.5) * (localAabbMax + localAabbMin);
94 btVector3 center = trans(localCenter);
96 btVector3 extent = localHalfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
97 aabbMin = center - extent;
98 aabbMax = center + extent;
101void btScaledBvhTriangleMeshShape::setLocalScaling(
const btVector3& scaling)
106const btVector3& btScaledBvhTriangleMeshShape::getLocalScaling()
const
111void btScaledBvhTriangleMeshShape::calculateLocalInertia(
btScalar mass, btVector3& inertia)
const
@ SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE
btBvhTriangleMeshShape(btStridingMeshInterface *meshInterface, bool useQuantizedAabbCompression, bool buildBvh=true)
btMatrix3x3
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btBvhTriangleMeshShape * m_bvhTriMeshShape
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)
btScaledTriangleCallback(btTriangleCallback *originalCallback, const btVector3 &localScaling)
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)=0
DEGForeachIDComponentCallback callback