Blender V4.3
btSdfCollisionShape.cpp
Go to the documentation of this file.
2#include "btMiniSDF.h"
4
17
18bool btSdfCollisionShape::initializeSDF(const char* sdfData, int sizeInBytes)
19{
20 bool valid = m_data->m_sdf.load(sdfData, sizeInBytes);
21 return valid;
22}
24{
25 m_shapeType = SDF_SHAPE_PROXYTYPE;
27
28 //"E:/develop/bullet3/data/toys/ground_hole64_64_8.cdf");//ground_cube.cdf");
29 /*unsigned int field_id=0;
30 Eigen::Vector3d x (1,10,1);
31 Eigen::Vector3d gradient;
32 double dist = m_data->m_sdf.interpolate(field_id, x, &gradient);
33 printf("dist=%g\n", dist);
34 */
35}
40
41void btSdfCollisionShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
42{
43 btAssert(m_data->m_sdf.isValid());
44 btVector3 localAabbMin = m_data->m_sdf.m_domain.m_min;
45 btVector3 localAabbMax = m_data->m_sdf.m_domain.m_max;
46 btScalar margin(0);
47 btTransformAabb(localAabbMin, localAabbMax, margin, t, aabbMin, aabbMax);
48}
49
50void btSdfCollisionShape::setLocalScaling(const btVector3& scaling)
51{
52 m_data->m_localScaling = scaling;
53}
55{
56 return m_data->m_localScaling;
57}
58void btSdfCollisionShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
59{
60 inertia.setValue(0, 0, 0);
61}
63{
64 return "btSdfCollisionShape";
65}
67{
68 m_data->m_margin = margin;
69}
71{
72 return m_data->m_margin;
73}
74
75void btSdfCollisionShape::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
76{
77 //not yet
78}
79
80bool btSdfCollisionShape::queryPoint(const btVector3& ptInSDF, btScalar& distOut, btVector3& normal)
81{
82 int field = 0;
83 btVector3 grad;
84 double dist;
85 bool hasResult = m_data->m_sdf.interpolate(field, dist, ptInSDF, &grad);
86 if (hasResult)
87 {
88 normal.setValue(grad[0], grad[1], grad[2]);
89 distOut = dist;
90 }
91 return hasResult;
92}
SIMD_FORCE_INLINE void btTransformAabb(const btVector3 &halfExtents, btScalar margin, const btTransform &t, btVector3 &aabbMinOut, btVector3 &aabbMaxOut)
@ SDF_SHAPE_PROXYTYPE
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition btScalar.h:314
#define btAssert(x)
Definition btScalar.h:295
btTransform
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition btTransform.h:30
bool initializeSDF(const char *sdfData, int sizeInBytes)
bool queryPoint(const btVector3 &ptInSDF, btScalar &distOut, btVector3 &normal)
virtual const char * getName() const
virtual void processAllTriangles(btTriangleCallback *callback, const btVector3 &aabbMin, const btVector3 &aabbMax) const
virtual btScalar getMargin() const
virtual void getAabb(const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const
virtual void setMargin(btScalar margin)
virtual void setLocalScaling(const btVector3 &scaling)
virtual void calculateLocalInertia(btScalar mass, btVector3 &inertia) const
virtual const btVector3 & getLocalScaling() const
DEGForeachIDComponentCallback callback
BLI_INLINE float grad(int hash_val, float x, float y, float z)
Definition noise.c:271
btVector3 m_max
Definition btMiniSDF.h:16
btVector3 m_min
Definition btMiniSDF.h:15
btAlignedBox3d m_domain
Definition btMiniSDF.h:92
bool load(const char *data, int size)
Definition btMiniSDF.cpp:45
bool interpolate(unsigned int field_id, double &dist, btVector3 const &x, btVector3 *gradient) const
bool isValid() const
Definition btMiniSDF.h:109