- https://www.khronos.org/files/collada_spec_1_5.pdf
- 오른손 좌표계
- 기본적으로 Z Up Axis, -Y Forward, X Right 좌표계
- Column Major(행우선) Matrix로 되어 있다.
- vertex의 최종위치 구하기 공식 ( row major matrix기준 )
- vPos = vPos * bind_shape_matrix * inv_bind_matrix * animation_matrix * bone_weight
Collada의 XML구조
<asset>
<unit name> : 단위
<up_axis> : Up Axis
<library_visual_scene>
- Scene의 모든 오브젝트들의 World Transform을 저장하고 있다.
- Bone의 Hierachy(계층구조)를 여기에서 알아낼수 있다. 주의할것은 library_visual_scene에 기록된 Bone의 Matrix는 그냥 참고용으로 생각해야 한다. 실제로 사용되는 Bone의 transform은 library_contollers에서 알아낼 수 있다.
-
- <library_controllers>
- bind_shape_matrix : Skinning된 메쉬의 transform이다. 당연히 메쉬마다 정보를 가지고 있다.
- inv_bind_matrix : Bone의 inversed transform matrix(역행렬), 메쉬에 적용할때 사용되며 Bone의 위치를 재구성할때에는 역행렬로 만든후 적용해야한다. 상대좌표계가 아니기 때문에 부모본과 상관없이 걍 사용하면 된다.
- bone weight, bone index : 메쉬의 Bone정보
- <library_animations>
- animation matrix : 상대좌표계이므로 최종 위치를 계산할때는 parent bone으로 부터 상속받아 child bone의 matrix를 누적해가며 계산해야 한다.
- <library_geometries>
- mesh, uv texcoord, vertex color
- mesh의 transform에 bind_shape_matrix를 미리 계산하여도 상관없다.
- <library_materialis>
- 기타정보, shader 코드
덧글