hkpRigidBody 스케일

hkpRigidBody를 스케일 하는 방법에 대해서 알아보자.

단 이 방법은 하복 문서에 따르면 툴이나 오프라인( 로딩바 진행시 )에서 하기를 권장하고 있다.
실시간으로 하기에는 속도 때문에 추천하지 않는다.

HavokLevel::AddPhysicsSystem(  )나 HavokLevel::AddWorld(  )에서 충돌 장면에 추가하기전에 주전자 크기를 1/2로 줄이고 있다.

m_shape가 const이지만 강제로 형변환하여 hkpShapeScalingUtility::scaleShape(  )로 크기를 바꾼다.

            //충돌 메시 스케일

            hkpRigidBody* rigidBody = system->getRigidBodies()[k];

            hkpRigidBodyCinfo cInfo;

            rigidBody->getCinfo( cInfo );

            hkpShape* shape = (hkpShape*)cInfo.m_shape;

            hkpShapeScalingUtility::scaleShape( shape, 0.5f );

두가지 다른 방법으로 스케일을 적용해 봤지만 실패한 방법을 정리 하였다.

1. hkpSystemScalingUtility::scaleSystem( )을 이용한 방법

        hkpSystemScalingUtility::scaleSystem( system, 0.5f );

아래 그림과 같은 에러가 뜨면서 비쥬얼 스튜디오 출력창에는 다음과 같은 에러가 뜬다.

Error: do not call setMass on a fixed or keyframed object(hkpKeyframedRigidMotion)

한줄로 제일 간단한 방법이지만 에러를 해결할 방법을 못찾았다.

  

 

2. hkpRigidBody::setTransform( )을 이용한 방법

하복 데모에서 비쥬얼적으로는 스케일링이 이상없다. 하지만 충돌이 되지 않는다.
주전자를 뚫고 바닥으로 계속을 떨어진다.

프로젝트 :
HavokTest_scale.zip

리소스:
MyTest_scale.zip

PS) 두 가지 실패한 방법중에 해결책으로 찾았으면 연락주세요.