Remove constructor from b3Vector3, to make it a POD type, so it can go into a union (and more compatible with OpenCL float4) Use b3MakeVector3 instead of constructor Share some code between C++ and GPU in a shared file: see b3TransformAabb2 in src/Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h Improve PairBench a bit, show timings and #overlapping pairs. Increase shadowmap default size to 8192x8192 (hope the GPU supports it)
37 lines
1.2 KiB
C
37 lines
1.2 KiB
C
|
|
#ifndef B3_SUPPORT_MAPPINGS_H
|
|
#define B3_SUPPORT_MAPPINGS_H
|
|
|
|
#include "Bullet3Common/b3Transform.h"
|
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
|
#include "b3VectorFloat4.h"
|
|
|
|
struct b3ConvexPolyhedronCL;
|
|
struct b3GjkPairDetector;
|
|
|
|
inline b3Vector3 localGetSupportVertexWithMargin(const float4& supportVec,const struct b3ConvexPolyhedronCL* hull,
|
|
const b3AlignedObjectArray<b3Vector3>& verticesA, b3Scalar margin)
|
|
{
|
|
b3Vector3 supVec = b3MakeVector3(b3Scalar(0.),b3Scalar(0.),b3Scalar(0.));
|
|
b3Scalar maxDot = b3Scalar(-B3_LARGE_FLOAT);
|
|
|
|
// Here we take advantage of dot(a, b*c) = dot(a*b, c). Note: This is true mathematically, but not numerically.
|
|
if( 0 < hull->m_numVertices )
|
|
{
|
|
const b3Vector3 scaled = supportVec;
|
|
int index = (int) scaled.maxDot( &verticesA[hull->m_vertexOffset], hull->m_numVertices, maxDot);
|
|
return verticesA[hull->m_vertexOffset+index];
|
|
}
|
|
|
|
return supVec;
|
|
|
|
}
|
|
|
|
inline b3Vector3 localGetSupportVertexWithoutMargin(const float4& supportVec,const struct b3ConvexPolyhedronCL* hull,
|
|
const b3AlignedObjectArray<b3Vector3>& verticesA)
|
|
{
|
|
return localGetSupportVertexWithMargin(supportVec,hull,verticesA,0.f);
|
|
}
|
|
|
|
#endif //B3_SUPPORT_MAPPINGS_H
|