Hello,
I would like to use PxContactSet::setTargetVelocity to achieve conveyor belt-like effects.
The box in my simulation is moving on the conveyor until it hits an obstacle (diverter) - I don’t know how to change to parameters to achieve realistic simulation results.
When I use initial velocity instead (for examlple gBox->setLinearVelocity(PxVec3(2.0f, 0.0f, 0.0f)) everything works fine but it is also not realistic…
Does anybody know how target velocity could work correctly or does anybody has experience withconveyor belt-like effects?
“The user-defined target velocity is used to complement the normal and frictional response to a contact. The actual response to a contact depends on the relative velocity, bounce threshold, mass properties and material properties.”
Thanks.
#Edit:
If I take a sphere instead of a box the sphere does not start moving on the conveyor - here it is only one contact point → solved: sceneDesc.frictionType = PxFrictionType::eTWO_DIRECTIONAL ist working - eONE_DIRECTIONAL is not working
→ next question (see attached jpg file): why does the sphere stop at the obstacle (realistic result would be, if the sphere continues rotation)
Does anybody know how to chose parameters correctly?
#Edit2:
Next Test: I have a conveyor target velocity in x-direction and a obstacle target velocity in y-direction. Everything works fine, until the sphere touches the obstacle - the sphere stops moving and turning… What is wrong?
Code:
void ContactModifyCallback::onContactModify(PxContactModifyPair *const pairs, PxU32 count)
{
for(PxU32 i = 0; i < count; i++)
{
// Conveyor Belt 1
if(pairs[i].actor[0] == gConveyor || pairs[i].actor[1] == gConveyor)
{
setTargetVelocity(pairs[i], PxVec3(1.0f, 0.0f, 0.0f));
}
// Obstacle1
if(pairs[i].actor[0] == gObstacle || pairs[i].actor[1] == gObstacle)
{
setTargetVelocity(pairs[i], PxVec3(0.0f, 1.0f, 0.0f));
}
}
};
static void setTargetVelocity(PxContactModifyPair& pair, const PxVec3& targetVelocity)
{
for(PxU32 i = 0; i < pair.contacts.size(); ++i)
{
pair.contacts.setTargetVelocity(i, targetVelocity);
}
}
#Edit3:
If I change the obstacle to a heavy RigidDynamic object and only set targetvelocity between sphere and conveyor, the sphere stops at the obstacle but conitnue its rotation!! Why it doesn’t work with two rigid static + one rigid dynamic?

