gltf 文件理解

下面列举了一个 gltf 文件,详细见注释

{
    "asset": {
        "generator": "COLLADA2GLTF", //生成工具
        "version": "2.0" //基本信息
    },
    "scene": 0, //当前活跃的场景索引,(这里指向场景列表中的第一个场景。glTF 文件可以包含多个场景,场景是 3D 内容的集合)
    "scenes": [ //一个包含场景的数组
        {
            "nodes": [ //包含该场景中的节点的索引数组。节点是 3D 空间中的基本单位,它们可以是几何体、摄像机、光源等对象
                0
            ]
        }
    ],
    "nodes": [ //描述场景中的每个节点。节点通常用于组合和转换 3D 对象
        {
            "children": [ //子节点的索引数组。节点可以有子节点,这有助于创建层次化结构(例如模型的父子关系
                1
            ],
            "matrix": [ //转换矩阵
                1.0,
                0.0,
                0.0,
                0.0,
                0.0,
                0.0,
                -1.0,
                0.0,
                0.0,
                1.0,
                0.0,
                0.0,
                0.0,
                0.0,
                0.0,
                1.0
            ]
        },
        {
            "mesh": 0 //这个矩阵是用于节点 0,表示该节点的空间变换
        }
    ],
    "meshes": [ //描述网格数据
        {
            "primitives": [ //网格的原始数据(如顶点、索引等),可以有多个原始数据数组来描述网格的不同部分(例如,面、边等)
                {
                    "attributes": { //顶点属性。这里,NORMAL 表示法线,POSITION 表示顶点位置。每个属性都与 accessor 的索引相关联,表示该属性的数据如何存储
                        "NORMAL": 1,
                        "POSITION": 2
                    },
                    "indices": 0,//该网格的索引数据,指向一个缓冲区(0)。索引定义了如何连接顶点来创建三角形面
                    "mode": 4, //渲染模式。4 表示 TRIANGLES,即使用三角形进行渲染
                    "material": 0 //材质的索引,这里指向材质 
                }
            ],
            "name": "Mesh"
        }
    ],
    "accessors": [ //访问和解释缓冲区数据的方式,定义了每个数据块的格式
        {
            "bufferView": 0, //指定数据存储的缓冲区视图的索引
            "byteOffset": 0, //数据在缓冲区中的偏移量
            "componentType": 5123, //数据元素的类型。5123 表示无符号短整型(UNSIGNED_SHORT),5126 表示浮点数(FLOAT)
            "count": 36, //数据中的元素数量
            "max": [ //数据的最大值和最小值
                23
            ],
            "min": [
                0
            ],
            "type": "SCALAR" //数据的类型,SCALAR 表示单一数值,VEC3 表示三维向量
        },
        {
            "bufferView": 1,
            "byteOffset": 0,
            "componentType": 5126,
            "count": 24,
            "max": [
                1.0,
                1.0,
                1.0
            ],
            "min": [
                -1.0,
                -1.0,
                -1.0
            ],
            "type": "VEC3"
        },
        {
            "bufferView": 1,
            "byteOffset": 288,
            "componentType": 5126,
            "count": 24,
            "max": [
                0.5,
                0.5,
                0.5
            ],
            "min": [
                -0.5,
                -0.5,
                -0.5
            ],
            "type": "VEC3"
        }
    ],
    "materials": [ //描述物体表面材质的属性
        {
            "pbrMetallicRoughness": { //描述基于金属粗糙度的材质模型(PBR)
                "baseColorFactor": [ //基础颜色(RGBA)。这里的颜色是红色 (0.8, 0.0, 0.0, 1.0)
                    0.800000011920929,
                    0.0,
                    0.0,
                    1.0
                ],
                "metallicFactor": 0.0 //金属度,这里是 0.0,意味着材质不具有金属感
            },
            "name": "Red"
        }
    ],
    "bufferViews": [ //定义如何解释缓冲区中的原始数据
        {
            "buffer": 0, //引用缓冲区的索引
            "byteOffset": 576, //缓冲区数据的偏移量
            "byteLength": 72, //数据的长度
            "target": 34963 //指定缓冲区的目标用途。例如,34963 表示 ARRAY_BUFFER,用于存储顶点数据;34962 表示 ELEMENT_ARRAY_BUFFER,用于存储索引数据
        },
        {
            "buffer": 0,
            "byteOffset": 0,
            "byteLength": 576,
            "byteStride": 12, //字节跨度,表示每个数据元素之间的字节数(如果数据是紧凑存储的,则通常为 0)
            "target": 34962
        }
    ],
    "buffers": [ //描述存储所有数据的原始二进制缓冲区
        {
            "byteLength": 648, //缓冲区的字节长度
            "uri": "Box0.bin" //缓冲区的 URI,这里指向 Box0.bin,表示二进制数据存储在这个文件中
        }
    ]
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容