For what it counts, the bullet manual reads:
- there will be only one-way interaction: dynamic objects will be pushed away but there is no influence from dynamics objects.
The degree of interaction with dynamic objects is, in my opinion, a bit lazy. I suppose bullet is assuming the objects "stay still" and warp around rather than move. It seems to me the impulse transmitted to touched object is way less intense than it should. But perhaps Bullet is not the right place to take care of this.
The only problem I'm having is that m_normalWorldOnB does not return the right results all of the time which allows me to sort of walk up slopes which I should not be able to do...
This worries me. Perhaps this returns the normal suggested by bullet to resolve compenetration instead? Do you mind to elaborate a bit in case you have got more info?
Since I am also trying to figure out a way to move kinematic objects (this time I will do it right!) I think it might be a good idea to write my current line of thinking there.
Context: a platformer (in the late 80s it would have been isometric).
Goal: move a collision object according to player input.
Features: must absolutely support walking up slopes. Must also be able to step up stairs.
In the future: jump and inertial frames.
Key concept: "movement intent". When the player hits "left" he has a rough expectation of what it will happen. The idea is to express this as a vector and "consume" as much of this vector as possible.
I was thinking about querying contact points for first, then select one of those to be used as a reference.
Then I was thinking about rotating (in terms of "pitch" only) the "intention vector" so it always slides on the touched volume (assumed planar), but if the normals are not the ones I expect then I'm screwed.
Then I would sweep a
GhostObject and get all the intersections which are coming from different volumes from the ones intended by the above volumes (but I'm not sure of the details here, I need to look at the contact point info, perhaps preventive generation will make this more involved).
I will move the player mesh and volume to the closest intersection passing the above test.
Then, if there's still movement available, I would try to sweep up the
GhostObject again and proceed similarly to figure out if I am trying to "step up".
This is mostly copied in concept from
btKinematicCharacterController. I'm not sure I need to "push down" the object after the movement however, I would just leave it to gravity in the next tick.
Suggestions are welcome.