장면 (Scenes)
1 2 3 4 5 6 7 8 9 10 11 | "scenes" : [ { "nodes" : [ 0 ] } ], "nodes" : [ { "mesh" : 0 } ], | cs |
장면 그래프를 형성하는 노드(Nodes forming the scene graph)
1 2 3 4 5 6 7 8 9 10 | traverse(node) { // Process the meshes, cameras, etc., that are // attached to this node - discussed later processElements(node); // Recursively process all children for each (child in node.children) { traverse(child); } } | cs |
Local and global transforms
1 2 3 4 5 6 7 8 | "node0": { "matrix": [ 2.0, 0.0, 0.0, 0.0, 0.0, 0.866, 0.5, 0.0, 0.0, -0.25, 0.433, 0.0, 10.0, 20.0, 30.0, 1.0 ] } | cs |
1 2 3 4 5 | "node0": { "translation": [ 10.0, 20.0, 30.0 ], "rotation": [ 0.259, 0.0, 0.0, 0.966 ], "scale": [ 2.0, 1.0, 0.5 ] } | cs |
회전은 4원수(quaternion)으로 주어진다. 4원수의 수학적 배경은 튜토리얼의 범위를 벗어난다. 예를 들어, 쿼터니언 [0.259, 0.0, 0.0, 0.966]은 x 축을 중심으로 약 30도 회전을 나타냅니다. 따라서이 쿼터니언은 회전 행렬로 변환 될 수 있습니다.
노드의 최종 로컬 변환 행렬을 계산할 때, 이 행렬들은 함께 곱해진다. 이러한 행렬을 올바른 순서로 곱하기를 수행하는 것이 중요합니다.
로컬 변환 행렬은 항상 M = T * R * S로 계산되어야하며, 여기서 T는 변환 부분의 행렬이고 R은 회전 부분의 행렬이고 S는 스케일 부분의 행렬입니다.
1 2 3 4 | translationMatrix = createTranslationMatrix(node.translation); rotationMatrix = createRotationMatrix(node.rotation); scaleMatrix = createScaleMatrix(node.scale); localTransform = translationMatrix * rotationMatrix * scaleMatrix; | cs |
1 2 3 4 5 | Structure: local transform global transform root R R +- nodeA A R*A +- nodeB B R*A*B +- nodeC C R*A*C | cs |
glTF - Accessors (0) | 2018.11.20 |
---|---|
glTF - Buffers, BufferViews (0) | 2018.11.20 |
glTF - 최소 glTF 파일 (Minimal Gltf File) (0) | 2018.11.19 |
glTF - 기본 구조 (Basic Gltf Structure) (0) | 2018.11.19 |
glTF - GL 전송 형식 (GL Transmission Format) (0) | 2018.11.19 |
댓글 영역