merged most of the changes from the branch into trunk, except for COLLADA, libxml and glut glitches.
Still need to verify to make sure no unwanted renaming is introduced.
This commit is contained in:
@@ -14,22 +14,22 @@ subject to the following restrictions:
|
||||
*/
|
||||
|
||||
#include "btTriangleMeshShape.h"
|
||||
#include "LinearMath/SimdVector3.h"
|
||||
#include "LinearMath/SimdQuaternion.h"
|
||||
#include "LinearMath/btVector3.h"
|
||||
#include "LinearMath/btQuaternion.h"
|
||||
#include "btStridingMeshInterface.h"
|
||||
#include "LinearMath/GenAabbUtil2.h"
|
||||
#include "LinearMath/btAabbUtil2.h"
|
||||
#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
|
||||
|
||||
#include "stdio.h"
|
||||
|
||||
TriangleMeshShape::TriangleMeshShape(StridingMeshInterface* meshInterface)
|
||||
btTriangleMeshShape::btTriangleMeshShape(btStridingMeshInterface* meshInterface)
|
||||
: m_meshInterface(meshInterface)
|
||||
{
|
||||
RecalcLocalAabb();
|
||||
}
|
||||
|
||||
|
||||
TriangleMeshShape::~TriangleMeshShape()
|
||||
btTriangleMeshShape::~btTriangleMeshShape()
|
||||
{
|
||||
|
||||
}
|
||||
@@ -37,20 +37,20 @@ TriangleMeshShape::~TriangleMeshShape()
|
||||
|
||||
|
||||
|
||||
void TriangleMeshShape::GetAabb(const SimdTransform& trans,SimdVector3& aabbMin,SimdVector3& aabbMax) const
|
||||
void btTriangleMeshShape::GetAabb(const btTransform& trans,btVector3& aabbMin,btVector3& aabbMax) const
|
||||
{
|
||||
|
||||
SimdVector3 localHalfExtents = 0.5f*(m_localAabbMax-m_localAabbMin);
|
||||
SimdVector3 localCenter = 0.5f*(m_localAabbMax+m_localAabbMin);
|
||||
btVector3 localHalfExtents = 0.5f*(m_localAabbMax-m_localAabbMin);
|
||||
btVector3 localCenter = 0.5f*(m_localAabbMax+m_localAabbMin);
|
||||
|
||||
SimdMatrix3x3 abs_b = trans.getBasis().absolute();
|
||||
btMatrix3x3 abs_b = trans.getBasis().absolute();
|
||||
|
||||
SimdPoint3 center = trans(localCenter);
|
||||
btPoint3 center = trans(localCenter);
|
||||
|
||||
SimdVector3 extent = SimdVector3(abs_b[0].dot(localHalfExtents),
|
||||
btVector3 extent = btVector3(abs_b[0].dot(localHalfExtents),
|
||||
abs_b[1].dot(localHalfExtents),
|
||||
abs_b[2].dot(localHalfExtents));
|
||||
extent += SimdVector3(GetMargin(),GetMargin(),GetMargin());
|
||||
extent += btVector3(GetMargin(),GetMargin(),GetMargin());
|
||||
|
||||
aabbMin = center - extent;
|
||||
aabbMax = center + extent;
|
||||
@@ -58,13 +58,13 @@ void TriangleMeshShape::GetAabb(const SimdTransform& trans,SimdVector3& aabbMin,
|
||||
|
||||
}
|
||||
|
||||
void TriangleMeshShape::RecalcLocalAabb()
|
||||
void btTriangleMeshShape::RecalcLocalAabb()
|
||||
{
|
||||
for (int i=0;i<3;i++)
|
||||
{
|
||||
SimdVector3 vec(0.f,0.f,0.f);
|
||||
btVector3 vec(0.f,0.f,0.f);
|
||||
vec[i] = 1.f;
|
||||
SimdVector3 tmp = LocalGetSupportingVertex(vec);
|
||||
btVector3 tmp = LocalGetSupportingVertex(vec);
|
||||
m_localAabbMax[i] = tmp[i]+m_collisionMargin;
|
||||
vec[i] = -1.f;
|
||||
tmp = LocalGetSupportingVertex(vec);
|
||||
@@ -74,28 +74,28 @@ void TriangleMeshShape::RecalcLocalAabb()
|
||||
|
||||
|
||||
|
||||
class SupportVertexCallback : public TriangleCallback
|
||||
class SupportVertexCallback : public btTriangleCallback
|
||||
{
|
||||
|
||||
SimdVector3 m_supportVertexLocal;
|
||||
btVector3 m_supportVertexLocal;
|
||||
public:
|
||||
|
||||
SimdTransform m_worldTrans;
|
||||
SimdScalar m_maxDot;
|
||||
SimdVector3 m_supportVecLocal;
|
||||
btTransform m_worldTrans;
|
||||
btScalar m_maxDot;
|
||||
btVector3 m_supportVecLocal;
|
||||
|
||||
SupportVertexCallback(const SimdVector3& supportVecWorld,const SimdTransform& trans)
|
||||
SupportVertexCallback(const btVector3& supportVecWorld,const btTransform& trans)
|
||||
: m_supportVertexLocal(0.f,0.f,0.f), m_worldTrans(trans) ,m_maxDot(-1e30f)
|
||||
|
||||
{
|
||||
m_supportVecLocal = supportVecWorld * m_worldTrans.getBasis();
|
||||
}
|
||||
|
||||
virtual void ProcessTriangle( SimdVector3* triangle,int partId, int triangleIndex)
|
||||
virtual void ProcessTriangle( btVector3* triangle,int partId, int triangleIndex)
|
||||
{
|
||||
for (int i=0;i<3;i++)
|
||||
{
|
||||
SimdScalar dot = m_supportVecLocal.dot(triangle[i]);
|
||||
btScalar dot = m_supportVecLocal.dot(triangle[i]);
|
||||
if (dot > m_maxDot)
|
||||
{
|
||||
m_maxDot = dot;
|
||||
@@ -104,12 +104,12 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
SimdVector3 GetSupportVertexWorldSpace()
|
||||
btVector3 GetSupportVertexWorldSpace()
|
||||
{
|
||||
return m_worldTrans(m_supportVertexLocal);
|
||||
}
|
||||
|
||||
SimdVector3 GetSupportVertexLocal()
|
||||
btVector3 GetSupportVertexLocal()
|
||||
{
|
||||
return m_supportVertexLocal;
|
||||
}
|
||||
@@ -117,13 +117,13 @@ public:
|
||||
};
|
||||
|
||||
|
||||
void TriangleMeshShape::setLocalScaling(const SimdVector3& scaling)
|
||||
void btTriangleMeshShape::setLocalScaling(const btVector3& scaling)
|
||||
{
|
||||
m_meshInterface->setScaling(scaling);
|
||||
RecalcLocalAabb();
|
||||
}
|
||||
|
||||
const SimdVector3& TriangleMeshShape::getLocalScaling() const
|
||||
const btVector3& btTriangleMeshShape::getLocalScaling() const
|
||||
{
|
||||
return m_meshInterface->getScaling();
|
||||
}
|
||||
@@ -136,23 +136,23 @@ const SimdVector3& TriangleMeshShape::getLocalScaling() const
|
||||
//#define DEBUG_TRIANGLE_MESH
|
||||
|
||||
|
||||
void TriangleMeshShape::ProcessAllTriangles(TriangleCallback* callback,const SimdVector3& aabbMin,const SimdVector3& aabbMax) const
|
||||
void btTriangleMeshShape::ProcessAllTriangles(btTriangleCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax) const
|
||||
{
|
||||
|
||||
struct FilteredCallback : public InternalTriangleIndexCallback
|
||||
struct FilteredCallback : public btInternalTriangleIndexCallback
|
||||
{
|
||||
TriangleCallback* m_callback;
|
||||
SimdVector3 m_aabbMin;
|
||||
SimdVector3 m_aabbMax;
|
||||
btTriangleCallback* m_callback;
|
||||
btVector3 m_aabbMin;
|
||||
btVector3 m_aabbMax;
|
||||
|
||||
FilteredCallback(TriangleCallback* callback,const SimdVector3& aabbMin,const SimdVector3& aabbMax)
|
||||
FilteredCallback(btTriangleCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax)
|
||||
:m_callback(callback),
|
||||
m_aabbMin(aabbMin),
|
||||
m_aabbMax(aabbMax)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void InternalProcessTriangleIndex(SimdVector3* triangle,int partId,int triangleIndex)
|
||||
virtual void InternalProcessTriangleIndex(btVector3* triangle,int partId,int triangleIndex)
|
||||
{
|
||||
if (TestTriangleAgainstAabb2(&triangle[0],m_aabbMin,m_aabbMax))
|
||||
{
|
||||
@@ -174,7 +174,7 @@ void TriangleMeshShape::ProcessAllTriangles(TriangleCallback* callback,const Sim
|
||||
|
||||
|
||||
|
||||
void TriangleMeshShape::CalculateLocalInertia(SimdScalar mass,SimdVector3& inertia)
|
||||
void btTriangleMeshShape::CalculateLocalInertia(btScalar mass,btVector3& inertia)
|
||||
{
|
||||
//moving concave objects not supported
|
||||
assert(0);
|
||||
@@ -182,16 +182,16 @@ void TriangleMeshShape::CalculateLocalInertia(SimdScalar mass,SimdVector3& inert
|
||||
}
|
||||
|
||||
|
||||
SimdVector3 TriangleMeshShape::LocalGetSupportingVertex(const SimdVector3& vec) const
|
||||
btVector3 btTriangleMeshShape::LocalGetSupportingVertex(const btVector3& vec) const
|
||||
{
|
||||
SimdVector3 supportVertex;
|
||||
btVector3 supportVertex;
|
||||
|
||||
SimdTransform ident;
|
||||
btTransform ident;
|
||||
ident.setIdentity();
|
||||
|
||||
SupportVertexCallback supportCallback(vec,ident);
|
||||
|
||||
SimdVector3 aabbMax(1e30f,1e30f,1e30f);
|
||||
btVector3 aabbMax(1e30f,1e30f,1e30f);
|
||||
|
||||
ProcessAllTriangles(&supportCallback,-aabbMax,aabbMax);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user