PhysX - Получить скорость контроллера

Я использую PhysX 3.3.0.

Мой персонаж — контроллер капсулы, и мне нужно получить фактическую скорость контроллера, что кажется намного сложнее, чем должно быть.

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

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

Это кажется довольно большим упущением, так что, возможно, я просто что-то упустил. Как я могу точно отслеживать скорость контроллера, если PhysX не предоставляет для этого функции?

// РЕДАКТИРОВАТЬ

Вот как я определяю скорость после симуляции сцены:

void ControllerPhysObj::UpdateVelocity()
{
    physx::PxRigidDynamic *actor = m_controller->getActor();
    physx::PxVec3 vel = actor->getLinearVelocity();
    m_velocity.x = vel.x;
    m_velocity.y = vel.y;
    m_velocity.z = vel.z;
}

m_controller — это PxCapsuleController.


person Silverlan    schedule 31.08.2014    source источник
comment
выложи код своих попыток получить скорость   -  person LearnCocos2D    schedule 31.08.2014
comment
Пока особо нечего показать, я просто использую getLinearVelocity, но код все равно добавил.   -  person Silverlan    schedule 31.08.2014
comment
какие значения возвращаются? откуда ты знаешь, что они лохи?   -  person LearnCocos2D    schedule 31.08.2014


Ответы (1)


Вопрос в том, как вы перемещаете свой контроллер. Если вы используете PxController::move тогда вы можете легко определить скорость, разделив фактический вектор смещения на время обновления кадра.

Фактический вектор смещения — это разница в положении вашей капсулы до и после Был вызван "nofollow">PxController::move.

Время кадра обновления (скорее всего) — это время, которое вы предоставляете для PxScene::simulate (скорее всего потому, что у вас может быть более продуманный подход к циклу обновления).

person game development germ    schedule 03.09.2014