PhysX - 获取控制器的速度

时间:2014-08-31 05:36:16

标签: controller game-engine game-physics physx kinematics

我正在使用PhysX 3.3.0。

我的角色是一个胶囊控制器,我需要能够检索控制器的实际速度,这似乎要比它应该更难实现。

我已经尝试在场景的主要模拟之后检索与控制器相关联的actor的速度,但是这只会返回虚假值,这很可能是因为控制器只是引擎盖下的运动角色。

现在,我能想到的唯一选择就是自己跟踪速度,但事情并非那么简单。我可以很容易地跟踪自己对速度的变化,例如:通过运动输入施加的速度。然而,只要控制器不与任何东西发生碰撞,这只是准确的。通过移动功能移动控制器后,控制器的速度可能已经因与地板或墙壁等的碰撞而改变。移动功能返回碰撞标志,但它们只告诉我两侧是否有碰撞,底部或顶部,但这不足以手动推导出新的速度。

这似乎是一个相当大的疏忽,所以也许我只是在这里遗漏了一些东西。如果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。

1 个答案:

答案 0 :(得分:0)

问题是如何移动控制器。如果您使用PxController::move,则可以通过将实际位移矢量除以更新帧的时间来轻松确定速度。

位移的实际向量是在调用PxController::move之前和之后胶囊位置的差异。

更新框架的时间(很可能)是您提供PxScene::simulate的时间(很可能是因为您可能有更详细的更新周期方法)。