I'm trying to use Bullet physic engine to create a 3D world.
I've got my character with a Capsule shape on his body and my ground his made of some static blocs stick together, here is a schema to illustrate my words:
The problem is present when my character run from one block to another: Bullet detect a collision and my character start to jump a little bit on y-axis.
How can I avoid the problem?
Your problem caller "Internal Edge Collision". I just found the solution few our hour ago. If you are using btHeightfieldTerrainShapefor your world then you must use btBvhTriangleMeshShape to slove this problem.
Here is the answer.
Add this callback:
Afterwards create the
btBvhTriangleMeshShape
and add this code wherepGround
is yourbtBvhTriangleMeshShape
:Or you can open the
InternalEdgeDemo
example inBullet
to see how to implement it in detail.What I did to overcome this issue is the following:
Instead of have the capsule slide on the ground, I had a dynamic capsule ride on top of a spring. I implemented the spring as several ray casts originating from bottom of the capsule. The length of the spring was like half a meter or less and it would pull and push the capsule to and from the ground. The grip/pull is important so the character wouldn't jump unexpectedly. The springs stiffness controls how much bobbing you have.
This had the following effects
I had to play around a lot with the stiffness of the spring, the length of the spring, the length of the grip etc. but in the end I was very happy about how simple yet well this worked.