我使用的是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。
发布于 2014-09-03 16:29:36
问题是你如何移动你的控制器。如果你使用的是PxController::move,那么你可以通过将实际的位移向量除以更新帧的时间来很容易地确定速度。
实际置换向量是调用PxController::move之前和之后胶囊位置的差异。
更新帧的时间(最有可能)是您为PxScene::simulate提供的时间(最有可能是因为您可能对更新周期有更详细的方法)。
https://stackoverflow.com/questions/25589234
复制相似问题