Havok Mesh Rendering 01

비쥬얼 디버거를 통해, 하복의 충돌 상황을 알수 있다.
하복 데모 처럼 직접 디버깅을 편하게 하기 위해 메쉬를 바로 렌더링 할 수 없을까?

HavokDebug.cpp의 아래 함수에서 최종적으로  다이렉트 X 정점을 생성한다.

void HavokDebug::MakeVertex( hkxMeshSection* section, const hkMatrix4& worldTransform )

hkxScene --> 루트 hkxNode --> hkxNode, kxNode를 자식으로 가지는 Scene Node 구조로 되어 있다. hkxNode는 게임브리오의 NiNode로 생각하면 된다.

hkxNode --> hkxMesh -->  hkxMeshSection, hkxMeshSection ......  hkxMeshSection

hkxMeshSection에서 hkxVertexBuffer, hkxIndexBuffer를 구한다.
이렇게 구한 정점과 정점 인덱스 정보로 DxMesh를 만든다.
DxMesh는 ID3DXMesh를 추상화한 클래스이다.

hkxScene::getWorldFromNodeTransform( )으로 hkxNode의 월드 트랜스폼( hkMatrix4 )을 구한다.
이렇게 구한 worldTransform과 hkxMeshSection의 정점들과 곱하여 최종 정점 정보를 구한다.

        //pos를 worldTransform에 의해 tempV로 이동, 회전한다.

        hkVector4 tempV;

        hkVector4 pos = hkVector4( position[0], position[1], position[2] );

        worldTransform.transformPosition(pos, tempV);

 
< 맥스에서 익스포트시 주의 사항 >

맥스에서 익스포트시 카메라 좌표계의 뷰 모드에서 오브젝트를 이동, 회전 하는 것은 문제가 안되지만 Pivot 만 움직이는 경우, hkxScene의 렌더링 데이터는 제대로 출력이 되지만, hkpPhysicsData는 정확하게
트랜스폼 되지 않으니 Pivot 값의 이동, 회전값으로 기본값으로 셋팅하는 것이 좋다.

PS : 내용이 오랜된 걸 포스팅 할려니 귀찮아진다.... 대충 대충 적게 된다.

프로젝트:
HavokDebug.h     HavokDebug.cpp
havok_meshDebug.zip