본문 바로가기
Computer/Havok

Havok

by DogBull 2008. 10. 21.


Havok Demo를 보면 크게 두가지 부분으로 나뉜다.

첫째, 물리를 위한 라이브러리.
둘째, 렌더링을 위한 라이브러리.

첫째의 물리를 위한 라이브러리 즉, Havok Physics & Havok Animation은 당연하다 하겠으나,
둘째의 렌더링을 위한 라이브러리도 그 소스가 공개되어 있지않다.

데모에서,
hkpRigidBody로 하나의 리지드를 만들면,
렌더링 프로세스에 표현이 된다.

이렇게 저렇게 렌더링 하겠다는 것을 따로 명시해 주지 않아도 어떤 방식에 의해
'화면에 그려야되는 오브젝트의 리스트'에 추가가 되게 되는 것이다.

예를 들어 보자.
Havok에서 하나의 Sphere의 모양을 정의하기 위한 Radius & Position을 비롯하여,
여러가지 성질(Restitution & Friction)을 설정해 주고 addEntity를 해 주면,
화면에 표시가 된다.

물리 파트와 렌더링 파트가 어떤 식으로 연결되는 것인지
( 이는 여러가지 방식으로 구현할 수 있다. PhysX처럼 할 수도 있지만, Havok는 그렇게 하지 않은듯 하다.
   Havok의 특성일 수도, 최적화일 수도 있으므로 이들의 데모대로 하는 것이 가장 효과적일 듯 하여
   살펴본 것이다. )
알아 본다.

Havok의 여러가지 Listener중 hkpEntityListener라는 인터페이스가 있다.
이는 hkpWorld::addEntity(...)를 호출하게 되면 불려지는 Listener이다.
(하복에서는 이런 식으로 Entity를 추가했을 때, 화면에 보여져야될 물체를
  마치 자동으로 추가되는 것 처럼 구현하고 있는 듯 하나 이 역시 추측일 뿐이다.)

hkpEntityListener인터페이스의 함수 중
virtual void entityAddedCallback(hkpEntity* entity); 라는 가상 함수가 있는데,
이 함수를 구현해 놓으면, addEntity시 호출이 되게 된다.

매개변수로 넘어오는 hkpEntity* 를 조작하여, 현재 추가되는 오브젝트가
box인지, sphere인지, 혹은 bvTree인지 그 shape를 판단할 수 있게 된다.

물론 버텍스/인덱스 정보 뿐만 아니라 버텍스 구조체(법선을 갖는지.. 텍스쳐, 블렌드웨이트)까지
얻을 수 있으므로 렌더링에 충분히 활용할 수 있을 것이다.

참고.
hkpWorld에 hkpEntityListener를 add 해 주어야 함.

'Computer > Havok' 카테고리의 다른 글

ragdoll in 3ds max  (0) 2008.08.12
Ragdoll ( No Constraint )  (0) 2008.08.01
Havok Vehicle Test  (0) 2008.07.23
Havok Cube Tower Test  (0) 2008.07.22
Setting Havok Physics ( VS2005)  (0) 2008.07.08