96 collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
97 collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
106 vec[0] = (
float)btvec[0];
107 vec[1] = (
float)btvec[1];
108 vec[2] = (
float)btvec[2];
112 quat[0] = btquat.
getW();
113 quat[1] = btquat.getX();
114 quat[2] = btquat.getY();
115 quat[3] = btquat.getZ();
136 world->pairCache->getOverlappingPairCache()->setOverlapFilterCallback(
world->filterCallback);
153 delete world->dynamicsWorld;
154 delete world->constraintSolver;
155 delete world->pairCache;
156 delete world->dispatcher;
157 delete world->collisionConfiguration;
158 delete world->filterCallback;
172 world->dynamicsWorld->setGravity(
btVector3(g_in[0], g_in[1], g_in[2]));
198 world->dynamicsWorld->stepSimulation(timeStep, maxSubSteps, timeSubStep);
213 int maxSerializeBufferSize = 1024 * 1024 * 5;
216 world->dynamicsWorld->serialize(serializer);
218 FILE *
file = fopen(filename,
"wb");
224 fprintf(stderr,
"RB_dworld_export: %s\n", strerror(errno));
236 object->col_groups = col_groups;
238 world->dynamicsWorld->addRigidBody(body);
245 world->dynamicsWorld->removeRigidBody(body);
252 const float loc_start[3],
253 const float loc_end[3],
262 if (collisionShape->isConvex()) {
264 btVector3(loc_start[0], loc_start[1], loc_start[2]),
265 btVector3(loc_end[0], loc_end[1], loc_end[2]));
267 btQuaternion obRot = body->getWorldTransform().getRotation();
270 rayFromTrans.setIdentity();
271 rayFromTrans.setRotation(obRot);
272 rayFromTrans.setOrigin(
btVector3(loc_start[0], loc_start[1], loc_start[2]));
275 rayToTrans.setIdentity();
276 rayToTrans.setRotation(obRot);
277 rayToTrans.setOrigin(
btVector3(loc_end[0], loc_end[1], loc_end[2]));
279 world->dynamicsWorld->convexSweepTest(
285 v_location[0] =
result.m_convexFromWorld[0] +
286 (
result.m_convexToWorld[0] -
result.m_convexFromWorld[0]) *
287 result.m_closestHitFraction;
288 v_location[1] =
result.m_convexFromWorld[1] +
289 (
result.m_convexToWorld[1] -
result.m_convexFromWorld[1]) *
290 result.m_closestHitFraction;
291 v_location[2] =
result.m_convexFromWorld[2] +
292 (
result.m_convexToWorld[2] -
result.m_convexFromWorld[2]) *
293 result.m_closestHitFraction;
295 v_hitpoint[0] =
result.m_hitPointWorld[0];
296 v_hitpoint[1] =
result.m_hitPointWorld[1];
297 v_hitpoint[2] =
result.m_hitPointWorld[2];
299 v_normal[0] =
result.m_hitNormalWorld[0];
300 v_normal[1] =
result.m_hitNormalWorld[1];
301 v_normal[2] =
result.m_hitNormalWorld[2];
321 trans.setOrigin(
btVector3(loc[0], loc[1], loc[2]));
332 object->body->setUserPointer(
object);
369 body->setCollisionShape(shape->
cshape);
387 value = 1.0f / value;
401 shape->calculateLocalInertia(value, localInertia);
415 return body->getFriction();
421 body->setFriction(value);
427 return body->getRestitution();
433 body->setRestitution(value);
552 if (use_deactivation) {
586 trans.getOpenGLMatrix((
btScalar *)m_out);
597 trans.setOrigin(
btVector3(loc[0], loc[1], loc[2]));
610 cshape->setLocalScaling(
btVector3(scale[0], scale[1], scale[2]));
728 shape->
cshape = hull_shape;
745 mesh->num_vertices = num_verts;
753 delete mesh->index_array;
754 delete[]
mesh->vertices;
755 delete[]
mesh->triangles;
761 for (
int i = 0; i < num_verts; i++) {
762 float *vert = (
float *)(((
char *)vertices + i * vert_stride));
763 mesh->vertices[i].x = vert[0];
764 mesh->vertices[i].y = vert[1];
765 mesh->vertices[i].z = vert[2];
770 mesh->triangles[num].v0 = index0;
771 mesh->triangles[num].v1 = index1;
772 mesh->triangles[num].v2 = index2;
778 (
int *)
mesh->triangles,
792 mesh->index_array,
true,
true);
812 for (
int i = 0; i < num_verts; i++) {
813 float *vert = (
float *)(((
char *)vertices + i * vert_stride));
837 shape->
cshape = gimpactShape;
851 shape->
cshape = compoundShape;
866 trans.setOrigin(
btVector3(loc[0], loc[1], loc[2]));
870 compoundShape->addChildShape(trans, shape->
cshape);
909 return shape->
cshape->getMargin();
914 shape->
cshape->setMargin(value);
926 world->dynamicsWorld->addConstraint(constraint, disable_collisions);
933 world->dynamicsWorld->removeConstraint(constraint);
946 pivot_transform.setIdentity();
947 pivot_transform.setOrigin(
btVector3(pivot[0], pivot[1], pivot[2]));
948 pivot_transform.setRotation(
btQuaternion(orn[1], orn[2], orn[3], orn[0]));
950 transform1 = body1->getWorldTransform().inverse() * pivot_transform;
951 transform2 = body2->getWorldTransform().inverse() * pivot_transform;
959 btVector3 pivot1 = body1->getWorldTransform().inverse() *
961 btVector3 pivot2 = body2->getWorldTransform().inverse() *
981 btFixedConstraint *con =
new btFixedConstraint(*body1, *body2, transform1, transform2);
1033 con->setUpperAngLimit(-1.0f);
1051 *body1, *body2, transform1, transform2,
true);
1069 *body1, *body2, transform1, transform2,
true);
1087 *body1, *body2, transform1, transform2);
1105 *body1, *body2, transform1, transform2,
true);
1108 for (
int i = 0; i < 6; i++) {
1109 con->setLimit(i, 0.0f, -1.0f);
1112 con->getTranslationalLimitMotor()->m_upperLimit.setValue(-1.0f, -1.0f, -1.0f);
1131 constraint->setEnabled(
enabled);
1139 float softness = 0.9f;
1140 float bias_factor = 0.3f;
1141 float relaxation_factor = 1.0f;
1143 constraint->setLimit(lower, upper, softness, bias_factor, relaxation_factor);
1150 constraint->setLowerLinLimit(lower);
1151 constraint->setUpperLinLimit(upper);
1155 rbConstraint *con,
float lin_lower,
float lin_upper,
float ang_lower,
float ang_upper)
1159 constraint->setLowerLinLimit(lin_lower);
1160 constraint->setUpperLinLimit(lin_upper);
1161 constraint->setLowerAngLimit(ang_lower);
1162 constraint->setUpperAngLimit(ang_upper);
1169 constraint->setLimit(axis, lower, upper);
1177 constraint->setLimit(axis, lower, upper);
1185 constraint->setStiffness(axis, stiffness);
1194 damping = (damping > 1.0f) ? 0.0f : 1.0f - damping;
1196 constraint->setDamping(axis, damping);
1204 constraint->enableSpring(axis, enable);
1212 constraint->setEquilibriumPoint();
1220 constraint->setStiffness(axis, stiffness);
1228 constraint->setDamping(axis, damping);
1236 constraint->enableSpring(axis, enable);
1244 constraint->setEquilibriumPoint();
1251 constraint->setOverrideNumSolverIterations(num_solver_iterations);
1258 constraint->setBreakingImpulseThreshold(
threshold);
1265 constraint->getTranslationalLimitMotor()->m_enableMotor[0] = enable_lin;
1266 constraint->getRotationalLimitMotor(0)->m_enableMotor = enable_ang;
1270 float max_impulse_lin,
1271 float max_impulse_ang)
1275 constraint->getTranslationalLimitMotor()->m_maxMotorForce.setX(max_impulse_lin);
1276 constraint->getRotationalLimitMotor(0)->m_maxMotorForce = max_impulse_ang;
1285 constraint->getTranslationalLimitMotor()->m_targetVelocity.setX(velocity_lin);
1286 constraint->getRotationalLimitMotor(0)->m_targetVelocity = velocity_ang;
typedef float(TangentPoint)[2]
void BLI_kdtree_nd_() free(KDTree *tree)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei stride
Rigid Body API for interfacing with external Physics Engines.
struct rbCollisionShape rbCollisionShape
struct rbMeshData rbMeshData
struct rbRigidBody rbRigidBody
struct rbDynamicsWorld rbDynamicsWorld
struct rbConstraint rbConstraint
btBoxShape(const btVector3 &boxHalfExtents)
@ GIMPACT_SHAPE_PROXYTYPE
Used for GIMPACT Trimesh integration.
@ SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE
btBvhTriangleMeshShape(btStridingMeshInterface *meshInterface, bool useQuantizedAabbCompression, bool buildBvh=true)
#define DISABLE_DEACTIVATION
void * getUserPointer() const
users can point to their objects, userPointer is not used by Bullet
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
btCompoundShape(bool enableDynamicAabbTree=true, const int initialChildCapacity=0)
btConvexHullShape(const btScalar *points=0, int numPoints=0, int stride=sizeof(btVector3))
btConvexShape()
not supported on IBM SDK, until we fix the alignment of btVector3
btDefaultMotionState(const btTransform &startTrans=btTransform::getIdentity(), const btTransform ¢erOfMassOffset=btTransform::getIdentity())
btDiscreteDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration)
this btDiscreteDynamicsWorld constructor gets created objects from the user, and will not delete thos...
btGeneric6DofConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, bool useLinearReferenceFrameA)
btGeneric6DofSpring2Constraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, RotateOrder rotOrder=RO_XYZ)
btGeneric6DofSpringConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, bool useLinearReferenceFrameA)
btHingeConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btVector3 &axisInA, const btVector3 &axisInB, bool useReferenceFrameA=false)
btPoint2PointConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btScaledBvhTriangleMeshShape(btBvhTriangleMeshShape *childShape, const btVector3 &localScaling)
btSequentialImpulseConstraintSolver()
btSliderConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, bool useLinearReferenceFrameA)
btSphereShape(btScalar radius)
btTriangleIndexVertexArray()
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
btConeShapeZ implements a Cone shape, around the Z axis
btAlignedObjectArray< btVector3 > vertices
virtual const unsigned char * getBufferPointer() const
virtual int getCurrentBufferSize() const
static void registerAlgorithm(btCollisionDispatcher *dispatcher)
Use this function for register the algorithm externally.
This class manages a mesh supplied by the btStridingMeshInterface interface.
SIMD_FORCE_INLINE void updateBound()
performs refit operation
virtual void getWorldTransform(btTransform &worldTrans) const =0
virtual void setWorldTransform(const btTransform &worldTrans)=0
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
SIMD_FORCE_INLINE const btScalar & getW() const
void setLinearFactor(const btVector3 &linearFactor)
SIMD_FORCE_INLINE const btCollisionShape * getCollisionShape() const
const btVector3 & getAngularVelocity() const
btMotionState * getMotionState()
btScalar getLinearSleepingThreshold() const
void applyCentralForce(const btVector3 &force)
btScalar getInvMass() const
btScalar getAngularDamping() const
int getNumConstraintRefs() const
void removeConstraintRef(btTypedConstraint *c)
void setSleepingThresholds(btScalar linear, btScalar angular)
void setMassProps(btScalar mass, const btVector3 &inertia)
const btVector3 & getLinearVelocity() const
btScalar getAngularSleepingThreshold() const
void setAngularFactor(const btVector3 &angFac)
btScalar getLinearDamping() const
btTypedConstraint * getConstraintRef(int index)
void setAngularVelocity(const btVector3 &ang_vel)
void setDamping(btScalar lin_damping, btScalar ang_damping)
void setLinearVelocity(const btVector3 &lin_vel)
void updateInertiaTensor()
ccl_gpu_kernel_postfix ccl_global float int int int int float threshold
void RB_constraint_set_max_impulse_motor(rbConstraint *con, float max_impulse_lin, float max_impulse_ang)
float RB_body_get_angular_damping(rbRigidBody *object)
rbConstraint * RB_constraint_new_point(float pivot[3], rbRigidBody *rb1, rbRigidBody *rb2)
float RB_body_get_linear_damping(rbRigidBody *object)
void RB_dworld_set_solver_iterations(rbDynamicsWorld *world, int num_solver_iterations)
void RB_dworld_add_body(rbDynamicsWorld *world, rbRigidBody *object, int col_groups)
void RB_dworld_set_split_impulse(rbDynamicsWorld *world, int split_impulse)
rbCollisionShape * RB_shape_new_convex_hull(float *verts, int stride, int count, float margin, bool *can_embed)
void RB_dworld_delete(rbDynamicsWorld *world)
rbCollisionShape * RB_shape_new_cone(float radius, float height)
rbCollisionShape * RB_shape_new_compound()
void RB_constraint_set_stiffness_6dof_spring(rbConstraint *con, int axis, float stiffness)
void RB_body_set_restitution(rbRigidBody *object, float value)
void RB_body_set_friction(rbRigidBody *object, float value)
void RB_body_set_mass(rbRigidBody *object, float value)
void RB_body_set_activation_state(rbRigidBody *object, int use_deactivation)
rbCollisionShape * RB_shape_new_box(float x, float y, float z)
void RB_shape_trimesh_update(rbCollisionShape *shape, float *vertices, int num_verts, int vert_stride, const float min[3], const float max[3])
void RB_dworld_add_constraint(rbDynamicsWorld *world, rbConstraint *con, int disable_collisions)
void RB_constraint_set_damping_6dof_spring(rbConstraint *con, int axis, float damping)
rbConstraint * RB_constraint_new_motor(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_shape_delete(rbCollisionShape *shape)
void RB_body_delete(rbRigidBody *object)
rbConstraint * RB_constraint_new_piston(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_body_get_linear_velocity(rbRigidBody *object, float v_out[3])
void RB_constraint_set_enabled(rbConstraint *con, int enabled)
void RB_body_set_angular_sleep_thresh(rbRigidBody *object, float value)
rbConstraint * RB_constraint_new_6dof_spring(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_constraint_set_stiffness_6dof_spring2(rbConstraint *con, int axis, float stiffness)
static void RB_trimesh_data_delete(rbMeshData *mesh)
void RB_constraint_set_equilibrium_6dof_spring(rbConstraint *con)
void RB_body_apply_central_force(rbRigidBody *object, const float v_in[3])
void RB_constraint_set_limits_slider(rbConstraint *con, float lower, float upper)
void RB_body_set_angular_damping(rbRigidBody *object, float value)
rbCollisionShape * RB_shape_new_sphere(float radius)
void RB_constraint_set_breaking_threshold(rbConstraint *con, float threshold)
void RB_dworld_remove_constraint(rbDynamicsWorld *world, rbConstraint *con)
void RB_dworld_remove_body(rbDynamicsWorld *world, rbRigidBody *object)
rbConstraint * RB_constraint_new_hinge(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
rbConstraint * RB_constraint_new_fixed(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
rbDynamicsWorld * RB_dworld_new(const float gravity[3])
void RB_world_convex_sweep_test(rbDynamicsWorld *world, rbRigidBody *object, const float loc_start[3], const float loc_end[3], float v_location[3], float v_hitpoint[3], float v_normal[3], int *r_hit)
void RB_constraint_set_enable_motor(rbConstraint *con, int enable_lin, int enable_ang)
void RB_body_get_orientation(rbRigidBody *object, float v_out[4])
void RB_body_set_linear_damping(rbRigidBody *object, float value)
void RB_dworld_set_gravity(rbDynamicsWorld *world, const float g_in[3])
void RB_compound_add_child_shape(rbCollisionShape *parentShape, rbCollisionShape *shape, const float loc[3], const float rot[4])
rbCollisionShape * RB_shape_new_gimpact_mesh(rbMeshData *mesh)
void RB_trimesh_add_triangle_indices(rbMeshData *mesh, int num, int index0, int index1, int index2)
void RB_trimesh_add_vertices(rbMeshData *mesh, float *vertices, int num_verts, int vert_stride)
void RB_constraint_set_limits_6dof_spring2(rbConstraint *con, int axis, float lower, float upper)
float RB_body_get_mass(rbRigidBody *object)
void RB_constraint_set_solver_iterations(rbConstraint *con, int num_solver_iterations)
void RB_constraint_set_damping_6dof_spring2(rbConstraint *con, int axis, float damping)
void RB_constraint_delete(rbConstraint *con)
void RB_body_set_collision_shape(rbRigidBody *object, rbCollisionShape *shape)
static void copy_quat_btquat(float quat[4], const btQuaternion &btquat)
void RB_body_set_scale(rbRigidBody *object, const float scale[3])
void RB_body_set_damping(rbRigidBody *object, float linear, float angular)
void RB_body_get_angular_velocity(rbRigidBody *object, float v_out[3])
void RB_constraint_set_spring_6dof_spring(rbConstraint *con, int axis, int enable)
void RB_shape_set_margin(rbCollisionShape *shape, float value)
void RB_body_set_linear_sleep_thresh(rbRigidBody *object, float value)
void RB_body_set_linear_velocity(rbRigidBody *object, const float v_in[3])
void RB_body_deactivate(rbRigidBody *object)
rbRigidBody * RB_body_new(rbCollisionShape *shape, const float loc[3], const float rot[4])
void RB_body_set_kinematic_state(rbRigidBody *object, int kinematic)
void RB_trimesh_finish(rbMeshData *mesh)
void RB_body_get_position(rbRigidBody *object, float v_out[3])
void RB_dworld_export(rbDynamicsWorld *world, const char *filename)
float RB_shape_get_margin(rbCollisionShape *shape)
rbCollisionShape * RB_shape_new_cylinder(float radius, float height)
rbConstraint * RB_constraint_new_6dof_spring2(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_constraint_set_limits_piston(rbConstraint *con, float lin_lower, float lin_upper, float ang_lower, float ang_upper)
static void copy_v3_btvec3(float vec[3], const btVector3 &btvec)
void RB_dworld_get_gravity(rbDynamicsWorld *world, float g_out[3])
void RB_body_get_transform_matrix(rbRigidBody *object, float m_out[4][4])
void RB_constraint_set_limits_6dof(rbConstraint *con, int axis, float lower, float upper)
void RB_body_set_loc_rot(rbRigidBody *object, const float loc[3], const float rot[4])
void RB_constraint_set_limits_hinge(rbConstraint *con, float lower, float upper)
rbMeshData * RB_trimesh_data_new(int num_tris, int num_verts)
void RB_constraint_set_target_velocity_motor(rbConstraint *con, float velocity_lin, float velocity_ang)
float RB_body_get_friction(rbRigidBody *object)
rbCollisionShape * RB_shape_new_trimesh(rbMeshData *mesh)
void RB_body_set_angular_velocity(rbRigidBody *object, const float v_in[3])
static void make_constraint_transforms(btTransform &transform1, btTransform &transform2, btRigidBody *body1, btRigidBody *body2, float pivot[3], float orn[4])
void RB_body_activate(rbRigidBody *object)
void RB_body_set_linear_factor(rbRigidBody *object, float x, float y, float z)
void RB_body_set_sleep_thresh(rbRigidBody *object, float linear, float angular)
rbConstraint * RB_constraint_new_slider(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_dworld_step_simulation(rbDynamicsWorld *world, float timeStep, int maxSubSteps, float timeSubStep)
void RB_constraint_set_equilibrium_6dof_spring2(rbConstraint *con)
float RB_body_get_linear_sleep_thresh(rbRigidBody *object)
void RB_body_get_scale(rbRigidBody *object, float v_out[3])
rbConstraint * RB_constraint_new_6dof(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_constraint_set_spring_6dof_spring2(rbConstraint *con, int axis, int enable)
rbCollisionShape * RB_shape_new_capsule(float radius, float height)
void RB_body_set_angular_factor(rbRigidBody *object, float x, float y, float z)
float RB_body_get_angular_sleep_thresh(rbRigidBody *object)
float RB_body_get_restitution(rbRigidBody *object)
size_t num_triangles() const
rbCollisionShape ** compoundChildShapes
btCollisionShape * cshape
btBroadphaseInterface * pairCache
btConstraintSolver * constraintSolver
btDefaultCollisionConfiguration * collisionConfiguration
btDiscreteDynamicsWorld * dynamicsWorld
btOverlapFilterCallback * filterCallback
btDispatcher * dispatcher
virtual bool needBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const
btTriangleIndexVertexArray * index_array