97 collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
98 collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
107 vec[0] = (
float)btvec[0];
108 vec[1] = (
float)btvec[1];
109 vec[2] = (
float)btvec[2];
113 quat[0] = btquat.
getW();
114 quat[1] = btquat.getX();
115 quat[2] = btquat.getY();
116 quat[3] = btquat.getZ();
137 world->pairCache->getOverlappingPairCache()->setOverlapFilterCallback(world->filterCallback);
144 world->dispatcher, world->pairCache, world->constraintSolver, world->collisionConfiguration);
154 delete world->dynamicsWorld;
155 delete world->constraintSolver;
156 delete world->pairCache;
157 delete world->dispatcher;
158 delete world->collisionConfiguration;
159 delete world->filterCallback;
173 world->dynamicsWorld->setGravity(
btVector3(g_in[0], g_in[1], g_in[2]));
199 world->dynamicsWorld->stepSimulation(timeStep, maxSubSteps, timeSubStep);
214 int maxSerializeBufferSize = 1024 * 1024 * 5;
217 world->dynamicsWorld->serialize(serializer);
219 FILE *file = fopen(filename,
"wb");
225 fprintf(stderr,
"RB_dworld_export: %s\n", strerror(errno));
237 object->col_groups = col_groups;
239 world->dynamicsWorld->addRigidBody(body);
246 world->dynamicsWorld->removeRigidBody(body);
253 const float loc_start[3],
254 const float loc_end[3],
263 if (collisionShape->isConvex()) {
265 btVector3(loc_start[0], loc_start[1], loc_start[2]),
266 btVector3(loc_end[0], loc_end[1], loc_end[2]));
268 btQuaternion obRot = body->getWorldTransform().getRotation();
271 rayFromTrans.setIdentity();
272 rayFromTrans.setRotation(obRot);
273 rayFromTrans.setOrigin(
btVector3(loc_start[0], loc_start[1], loc_start[2]));
276 rayToTrans.setIdentity();
277 rayToTrans.setRotation(obRot);
278 rayToTrans.setOrigin(
btVector3(loc_end[0], loc_end[1], loc_end[2]));
280 world->dynamicsWorld->convexSweepTest(
281 (
btConvexShape *)collisionShape, rayFromTrans, rayToTrans, result, 0);
283 if (result.hasHit()) {
286 v_location[0] = result.m_convexFromWorld[0] +
287 (result.m_convexToWorld[0] - result.m_convexFromWorld[0]) *
288 result.m_closestHitFraction;
289 v_location[1] = result.m_convexFromWorld[1] +
290 (result.m_convexToWorld[1] - result.m_convexFromWorld[1]) *
291 result.m_closestHitFraction;
292 v_location[2] = result.m_convexFromWorld[2] +
293 (result.m_convexToWorld[2] - result.m_convexFromWorld[2]) *
294 result.m_closestHitFraction;
296 v_hitpoint[0] = result.m_hitPointWorld[0];
297 v_hitpoint[1] = result.m_hitPointWorld[1];
298 v_hitpoint[2] = result.m_hitPointWorld[2];
300 v_normal[0] = result.m_hitNormalWorld[0];
301 v_normal[1] = result.m_hitNormalWorld[1];
302 v_normal[2] = result.m_hitNormalWorld[2];
322 trans.setOrigin(
btVector3(loc[0], loc[1], loc[2]));
333 object->body->setUserPointer(
object);
370 body->setCollisionShape(shape->cshape);
388 value = 1.0f / value;
397 btVector3 localInertia(0, 0, 0);
402 shape->calculateLocalInertia(value, localInertia);
405 btVector3 minAabb, maxAabb;
416 return body->getFriction();
422 body->setFriction(value);
428 return body->getRestitution();
434 body->setRestitution(value);
541 body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
544 body->setCollisionFlags(body->getCollisionFlags() & ~btCollisionObject::CF_KINEMATIC_OBJECT);
553 if (use_deactivation) {
587 trans.getOpenGLMatrix((
btScalar *)m_out);
598 trans.setOrigin(
btVector3(loc[0], loc[1], loc[2]));
611 cshape->setLocalScaling(
btVector3(scale[0], scale[1], scale[2]));
667 shape->compoundChilds = 0;
668 shape->compoundChildShapes =
NULL;
677 shape->compoundChilds = 0;
678 shape->compoundChildShapes =
NULL;
687 shape->compoundChilds = 0;
688 shape->compoundChildShapes =
NULL;
697 shape->compoundChilds = 0;
698 shape->compoundChildShapes =
NULL;
707 shape->compoundChilds = 0;
708 shape->compoundChildShapes =
NULL;
715 const float *
verts,
int stride,
int count,
float margin,
bool *can_embed)
720 if (hull_computer.compute(
verts, stride,
count, margin, 0.0f) < 0.0f) {
721 hull_computer.compute(
verts, stride,
count, 0.0f, 0.0f);
729 shape->cshape = hull_shape;
731 shape->compoundChilds = 0;
732 shape->compoundChildShapes =
NULL;
745 mesh->triangles =
new rbTri[num_tris];
746 mesh->num_vertices = num_verts;
747 mesh->num_triangles = num_tris;
754 delete mesh->index_array;
755 delete[] mesh->vertices;
756 delete[] mesh->triangles;
762 for (
int i = 0; i < num_verts; i++) {
763 float *vert = (
float *)(((
char *)vertices + i * vert_stride));
764 mesh->vertices[i].x = vert[0];
765 mesh->vertices[i].y = vert[1];
766 mesh->vertices[i].z = vert[2];
771 mesh->triangles[num].v0 = index0;
772 mesh->triangles[num].v1 = index1;
773 mesh->triangles[num].v2 = index2;
779 (
int *)mesh->triangles,
793 mesh->index_array,
true,
true);
797 shape->compoundChilds = 0;
798 shape->compoundChildShapes =
NULL;
803 const float *vertices,
809 if (shape->mesh ==
NULL || num_verts != shape->mesh->num_vertices) {
813 for (
int i = 0; i < num_verts; i++) {
814 float *vert = (
float *)(((
char *)vertices + i * vert_stride));
815 shape->mesh->vertices[i].x = vert[0];
816 shape->mesh->vertices[i].y = vert[1];
817 shape->mesh->vertices[i].z = vert[2];
838 shape->cshape = gimpactShape;
840 shape->compoundChilds = 0;
841 shape->compoundChildShapes =
NULL;
852 shape->cshape = compoundShape;
854 shape->compoundChilds = 0;
855 shape->compoundChildShapes =
NULL;
867 trans.setOrigin(
btVector3(loc[0], loc[1], loc[2]));
871 compoundShape->addChildShape(trans, shape->cshape);
893 delete shape->cshape;
896 for (
int i = 0; i < shape->compoundChilds; i++) {
899 if (shape->compoundChildShapes !=
NULL) {
900 free(shape->compoundChildShapes);
910 return shape->cshape->getMargin();
915 shape->cshape->setMargin(value);
925 btTypedConstraint *constraint =
reinterpret_cast<btTypedConstraint *
>(con);
927 world->dynamicsWorld->addConstraint(constraint, disable_collisions);
932 btTypedConstraint *constraint =
reinterpret_cast<btTypedConstraint *
>(con);
934 world->dynamicsWorld->removeConstraint(constraint);
943 const float pivot[3],
947 pivot_transform.setIdentity();
948 pivot_transform.setOrigin(
btVector3(pivot[0], pivot[1], pivot[2]));
949 pivot_transform.setRotation(
btQuaternion(orn[1], orn[2], orn[3], orn[0]));
951 transform1 = body1->getWorldTransform().inverse() * pivot_transform;
952 transform2 = body2->getWorldTransform().inverse() * pivot_transform;
960 btVector3 pivot1 = body1->getWorldTransform().inverse() *
962 btVector3 pivot2 = body2->getWorldTransform().inverse() *
982 btFixedConstraint *con =
new btFixedConstraint(*body1, *body2, transform1, transform2);
1034 con->setUpperAngLimit(-1.0f);
1052 *body1, *body2, transform1, transform2,
true);
1070 *body1, *body2, transform1, transform2,
true);
1088 *body1, *body2, transform1, transform2);
1106 *body1, *body2, transform1, transform2,
true);
1109 for (
int i = 0; i < 6; i++) {
1110 con->setLimit(i, 0.0f, -1.0f);
1113 con->getTranslationalLimitMotor()->m_upperLimit.setValue(-1.0f, -1.0f, -1.0f);
1122 btTypedConstraint *constraint =
reinterpret_cast<btTypedConstraint *
>(con);
1127 constraint->getRigidBodyA().removeConstraintRef(constraint);
1128 constraint->getRigidBodyB().removeConstraintRef(constraint);
1137 btTypedConstraint *constraint =
reinterpret_cast<btTypedConstraint *
>(con);
1139 constraint->setEnabled(enabled);
1147 float softness = 0.9f;
1148 float bias_factor = 0.3f;
1149 float relaxation_factor = 1.0f;
1151 constraint->setLimit(lower, upper, softness, bias_factor, relaxation_factor);
1158 constraint->setLowerLinLimit(lower);
1159 constraint->setUpperLinLimit(upper);
1163 rbConstraint *con,
float lin_lower,
float lin_upper,
float ang_lower,
float ang_upper)
1167 constraint->setLowerLinLimit(lin_lower);
1168 constraint->setUpperLinLimit(lin_upper);
1169 constraint->setLowerAngLimit(ang_lower);
1170 constraint->setUpperAngLimit(ang_upper);
1177 constraint->setLimit(axis, lower, upper);
1185 constraint->setLimit(axis, lower, upper);
1193 constraint->setStiffness(axis, stiffness);
1202 damping = (damping > 1.0f) ? 0.0f : 1.0f - damping;
1204 constraint->setDamping(axis, damping);
1212 constraint->enableSpring(axis, enable);
1220 constraint->setEquilibriumPoint();
1228 constraint->setStiffness(axis, stiffness);
1236 constraint->setDamping(axis, damping);
1244 constraint->enableSpring(axis, enable);
1252 constraint->setEquilibriumPoint();
1257 btTypedConstraint *constraint =
reinterpret_cast<btTypedConstraint *
>(con);
1259 constraint->setOverrideNumSolverIterations(num_solver_iterations);
1264 btTypedConstraint *constraint =
reinterpret_cast<btTypedConstraint *
>(con);
1266 constraint->setBreakingImpulseThreshold(threshold);
1273 constraint->getTranslationalLimitMotor()->m_enableMotor[0] = enable_lin;
1274 constraint->getRotationalLimitMotor(0)->m_enableMotor = enable_ang;
1278 float max_impulse_lin,
1279 float max_impulse_ang)
1283 constraint->getTranslationalLimitMotor()->m_maxMotorForce.setX(max_impulse_lin);
1284 constraint->getRotationalLimitMotor(0)->m_maxMotorForce = max_impulse_ang;
1293 constraint->getTranslationalLimitMotor()->m_targetVelocity.setX(velocity_lin);
1294 constraint->getRotationalLimitMotor(0)->m_targetVelocity = velocity_ang;
void BLI_kdtree_nd_ free(KDTree *tree)
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)
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
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()
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 int getCurrentBufferSize() const
virtual const unsigned char * getBufferPointer() 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)
btScalar getLinearSleepingThreshold() const
void applyCentralForce(const btVector3 &force)
btScalar getInvMass() const
btScalar getAngularDamping() const
const btVector3 & getAngularVelocity() const
btMotionState * getMotionState()
int getNumConstraintRefs() const
void removeConstraintRef(btTypedConstraint *c)
void setSleepingThresholds(btScalar linear, btScalar angular)
void setMassProps(btScalar mass, const btVector3 &inertia)
btScalar getAngularSleepingThreshold() const
void setAngularFactor(const btVector3 &angFac)
SIMD_FORCE_INLINE const btCollisionShape * getCollisionShape() const
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()
const btVector3 & getLinearVelocity() const
draw_view in_light_buf[] float
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)
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_compound()
void RB_dworld_delete(rbDynamicsWorld *world)
void RB_constraint_set_stiffness_6dof_spring(rbConstraint *con, int axis, float stiffness)
void RB_body_set_restitution(rbRigidBody *object, float value)
rbCollisionShape * RB_shape_new_box(float x, float y, float z)
void RB_body_set_friction(rbRigidBody *object, float value)
void RB_body_set_mass(rbRigidBody *object, float value)
rbConstraint * RB_constraint_new_fixed(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_body_set_activation_state(rbRigidBody *object, int use_deactivation)
rbConstraint * RB_constraint_new_6dof_spring(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
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)
rbCollisionShape * RB_shape_new_gimpact_mesh(rbMeshData *mesh)
void RB_shape_delete(rbCollisionShape *shape)
void RB_body_delete(rbRigidBody *object)
rbCollisionShape * RB_shape_new_trimesh(rbMeshData *mesh)
rbConstraint * RB_constraint_new_slider(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)
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)
rbConstraint * RB_constraint_new_piston(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_body_set_angular_damping(rbRigidBody *object, float value)
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)
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])
rbDynamicsWorld * RB_dworld_new(const float gravity[3])
void RB_trimesh_add_triangle_indices(rbMeshData *mesh, int num, int index0, int index1, int index2)
rbMeshData * RB_trimesh_data_new(int num_tris, int num_verts)
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)
rbConstraint * RB_constraint_new_6dof(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
float RB_body_get_mass(rbRigidBody *object)
void RB_constraint_set_solver_iterations(rbConstraint *con, int num_solver_iterations)
rbCollisionShape * RB_shape_new_cylinder(float radius, float height)
static void make_constraint_transforms(btTransform &transform1, btTransform &transform2, btRigidBody *body1, btRigidBody *body2, const float pivot[3], const float orn[4])
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_shape_trimesh_update(rbCollisionShape *shape, const float *vertices, int num_verts, int vert_stride, const float min[3], const float max[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)
rbRigidBody * RB_body_new(rbCollisionShape *shape, const float loc[3], const float rot[4])
void RB_body_set_linear_velocity(rbRigidBody *object, const float v_in[3])
void RB_body_deactivate(rbRigidBody *object)
void RB_body_set_kinematic_state(rbRigidBody *object, int kinematic)
rbConstraint * RB_constraint_new_6dof_spring2(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
rbConstraint * RB_constraint_new_hinge(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_trimesh_finish(rbMeshData *mesh)
void RB_body_get_position(rbRigidBody *object, float v_out[3])
rbCollisionShape * RB_shape_new_convex_hull(const float *verts, int stride, int count, float margin, bool *can_embed)
void RB_dworld_export(rbDynamicsWorld *world, const char *filename)
rbConstraint * RB_constraint_new_point(const float pivot[3], rbRigidBody *rb1, rbRigidBody *rb2)
float RB_shape_get_margin(rbCollisionShape *shape)
rbCollisionShape * RB_shape_new_cone(float radius, float height)
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)
void RB_constraint_set_target_velocity_motor(rbConstraint *con, float velocity_lin, float velocity_ang)
float RB_body_get_friction(rbRigidBody *object)
void RB_body_set_angular_velocity(rbRigidBody *object, const float v_in[3])
rbCollisionShape * RB_shape_new_sphere(float radius)
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)
void RB_dworld_step_simulation(rbDynamicsWorld *world, float timeStep, int maxSubSteps, float timeSubStep)
void RB_constraint_set_equilibrium_6dof_spring2(rbConstraint *con)
rbCollisionShape * RB_shape_new_capsule(float radius, float height)
float RB_body_get_linear_sleep_thresh(rbRigidBody *object)
rbConstraint * RB_constraint_new_motor(float pivot[3], float orn[4], rbRigidBody *rb1, rbRigidBody *rb2)
void RB_body_get_scale(rbRigidBody *object, float v_out[3])
void RB_constraint_set_spring_6dof_spring2(rbConstraint *con, int axis, int enable)
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)
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