2014-08-31 12 views
0

PhysX 3.3.0을 사용하고 있습니다.PhysX - 컨트롤러의 속도 얻기

내 캐릭터가 캡슐 컨트롤러이고 컨트롤러의 실제 속도를 검색 할 수 있어야합니다. 실제 속도를 검색 할 수 있어야합니다.

씬의 주 시뮬레이션 후에 컨트롤러와 연결된 액터의 속도를 검색하려했지만 컨트롤러가 단지 두포 아래의 운동 학적 액터이기 때문에 가짜 값을 반환합니다. .

이제 내가 생각할 수있는 유일한 대안은 속도를 직접 추적하는 것이지만, 그렇게 간단하지는 않습니다. 속도에 대한 내 자신의 변화를 쉽게 추적 할 수 있습니다 (예 : 속도는 이동 입력을 통해 적용됩니다. 그러나 컨트롤러가 아무 것도 충돌하지 않는 한 그것은 정확합니다. 이동 기능을 통해 컨트롤러를 이동 한 후 컨트롤러의 속도가 바닥이나 벽 등과의 충돌에 의해 변경되었을 수 있습니다. 이동 기능은 충돌 플래그를 반환하지만 측부 어딘가에 충돌이 있었는지 여부 만 알려줍니다 , bottom 또는 top이지만 새로운 속도를 수동으로 유도하기에는 정확하지 않습니다.

이것은 다소 큰 감독처럼 보입니다. 그래서 여기에 뭔가 빠져 있습니다. 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

속도를 얻으려고 시도한 코드를 게시하십시오. – LearnCocos2D

+0

표시 할 내용이 많지 않습니다. 'getLinearVelocity'를 사용하고 있지만 어쨌든 코드를 추가했습니다. – Silverlan

+0

반환되는 값은 무엇입니까? 그들이 가짜라는 것을 어떻게 압니까? – LearnCocos2D

답변

0

질문은 컨트롤러를 어떻게 이동시키는가입니다. PxController::move을 사용하면 실제 변위 벡터를 업데이트 프레임 시간으로 나누어 속도를 쉽게 결정할 수 있습니다.

실제 이동 벡터는 PxController::move이 호출되기 전과 후에 캡슐의 위치가 다른 것입니다.

업데이트 프레임의 시간은 대체로 PxScene::simulate을 제공하는 시간입니다 (업데이트주기에 대해 좀 더 정교한 접근 방식을 취할 가능성이 높기 때문일 수 있습니다).