PhysX: трения в суставах / "жесткие" соединения - PullRequest
2 голосов
/ 28 мая 2010

Я сейчас работаю с Physx (пытаюсь добавить ik в ragdoll). По какой-то причине все соединения тряпичной куклы не имеют трения, и в результате тряпка имеет тенденцию «колебаться», особенно когда она висит в воздухе и соединена с несколькими движущимися кинематическими акторами.

Я бы хотел добавить трение к суставам и сделать их "жесткими". Представьте себе дверь (с чрезвычайно ржавым шарниром), которую нужно несколько раз толкнуть, чтобы открыть - то есть она вращается вокруг петли, но не сильно, быстро останавливается, и для ее вращения требуется большое усилие. Или подумайте об искусственных манекенах (см. Изображения в Google) - их конечности двигаются, но они не вращаются свободно.

К сожалению, я не могу найти ничего, связанного с трением суставов в Physx. Я проверил документацию, Google и заголовки и не смог найти ничего полезного.

Итак, как мне реализовать жесткие соединения / трение суставов с помощью Physx? (Я думаю) Я видел физические игры без этой проблемы, так что, очевидно, должен быть какой-то способ сделать это.

P.S. Я не говорю о совместной / решающей нестабильности здесь. Ragdoll стабилен (более или менее), и соединения имеют степень свободы (ограничения суставов), но у суставов нет трения, и я хотел бы добавить к ним трение.

Ответы [ 3 ]

1 голос
/ 28 мая 2010

Я недавно задал вопрос на форумах nvidia, который может быть связан с этим: ссылка

К сожалению, я не получил реального ответа на свои вопросы, но сумел сделать то, что хочу, использование пружины в соединении может помочь вам, если вы только добавите постоянную демпфирования без постоянной пружины. Это работает в моем случае, но я не могу объяснить, почему, поэтому, хотя я счастлив использовать его, я не совсем уверен, рекомендовать ли это.

Я не знаю, можете ли вы также добавить угловое демпфирование ко всем отдельным частям тряпичной куклы, что заставит их замедляться быстрее после того, как они начнут двигаться, но это может выглядеть неправильно. Вероятно, одна из тех вещей, с которыми вам придется поэкспериментировать.

0 голосов
/ 17 октября 2010

Почему бы вам не попробовать это:

d6Desc.swingDrive.driveType.raiseFlagMask (NX_D6JOINT_DRIVE_VELOCITY); d6Desc.swingDrive.forceLimit = 0.1f; d6Desc.twistDrive.driveType.raiseFlagMask (NX_D6JOINT_DRIVE_VELOCITY); d6Desc.twistDrive.forceLimit = 0.1f; d6Desc.driveAngularVelocity.x = 0; d6Desc.driveAngularVelocity.y = 0; d6Desc.driveAngularVelocity.z = 0;

Вы увеличиваете скорость до 0 с небольшой силой, таким образом, движение будет уменьшено, и ваши объекты перестанут двигаться на полу. Это не совсем как трение, но близко.

0 голосов
/ 28 мая 2010

Я нашел эту ветку форума о шатких соединениях в Physx, не знаю, видели ли вы это, но я надеюсь, что это поможет.

...