I don't know how the python stuff works. I think it uses the CAPI under the hood and if so: that would probably have to be enhanced to get your custom feature exposed. However, perhaps there is already an event you can handle in python when a "ghost overlap add" happens, dunno.
Looking at the git commit history... A fix for rolling friction was committed in March 2019: commit 4c375588054dd3f99a1b0da00a68cc4a15b2136e Merge: 0c1faf18b 04441a29c Author: erwincoumans <erwin.coumans@gmail.com> Date: Sun Mar 3 20:56:12 2019 -0800 Merge pull request #2138 from erwincoumans/master...
Here is one way to do it: (1) Derive a class from btGhostObject and copy the base addOverlappingObjectInternal() method into a modified override like this: class TriggerObject : puclic btGhostObject { public: void btGhostObject::addOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btBroadphas...
AFAIK Bullet does not have tools that would make your project trivial. However I could see how Bullet could help. Bullet can perform "sweeps" of objects with convex shapes to figure out where they first hit other non-moving objects when travelling along a linear path. So it would be possible to swee...
The GJK algorithm uses a while(true) loop when trying to prove the origin is either inside or outside the Minkowski sum. The loop has exit cases for when poof is determined and a final "max iterations" exit case. Your configuration is looping "forever" and finally hitting max iterations. The relevan...
The btRigidBody class does not store mass. Instead it has a data member called m_inverseMass. This because it never actually multiplies by mass - it always divides instead.
You can use btRigidBody::getInvMass() to get the inverse mass, and then you can invert that to get mass.
My experience has been btCompoundShape is indeed performance friendly, so it would be a mystery as to why you see such a dramatic performance change. You should obtain detailed timing measurements of a step to see where it is all being spent. The easiest way to do this is to call CProfileManager::du...
First thing to try would be to use smaller substeps. Your code does this: _bWorld->stepSimulation(_timeline.previousFrameDuration(), 1); //_bWorld->stepSimulation(0.016); Which uses the default substep duration: one 1/60th of a second, and you only take one substep per step. What I would recommend i...
If you have identified a bug in the rolling friction implementation, would you be able to supply a fix and submit a pull request (PR) against the bullet github repository? Alternatively, would you be able to explain the bug/fix so that someone else could make that PR?
When I look at the btGeneric6DofSpring2Constraint code I see many parameters that can be changed. Most of these have default values assigned in the various helper class ctors, while the frameInA and frameInB parameters are required input to the btGeneric6DofSpring2Constrain ctor. Those frame paramet...
When you move a kinematic object you don't need to give it non-zero velocities. If you do set its velocities non-zero it doesn't necessarily move forward in that way. Instead whenever the RigidBody needs to know its new transform external code must supply it (this is usually done via the MotionState...
I realized after writing it up: the algorithm above is limited to rotation and scale transformations. It doesn't handle translations. For that you have to use 4D vectors where each vector looks like: v = <x, y, z, 1> and you would need four pairs of corresponding points to build the two 4x4 matrices...
What you're asking about is called "inverse kinematics". You know the final destination and the problem is to determine the path to get there, or whether a valid path exists or not. I don't have the time or expertise to write up tutorial here. I recommend you research the subject to see what info yo...
This sounds a math question about how to transform from one frame to another. Given some 2D point on the screen (frameA) you want to compute the corresponding 3D point in the world-frame of the physics simulation (frameB). There exists a transform that does what you want such that: pointInB = transf...