glTF 教程

简单的纹理
如前几节所示,glTF 资产中的材质定义包含材质颜色或材质在光线影响下的整体外观的不同参数。这些属性可以通过单个值给出,例如,定义整个对象的颜色或粗糙度。或者,这些值可以通过映射在对象表面上的纹理来提供。下面是一个 glTF 资产,它定义了具有简单单个纹理的材质:
{
"scene": 0,
"scenes" : [ {
"nodes" : [ 0 ]
} ],
"nodes" : [ {
"mesh" : 0
} ],
"meshes" : [ {
"primitives" : [ {
"attributes" : {
"POSITION" : 1,
"TEXCOORD_0" : 2
},
"indices" : 0,
"material" : 0
} ]
} ],

"materials" : [ {
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 0
},
"metallicFactor" : 0.0,
"roughnessFactor" : 1.0
}
} ],

"textures" : [ {
"sampler" : 0,
"source" : 0
} ],
"images" : [ {
"uri" : "testTexture.png"
} ],
"samplers" : [ {
"magFilter" : 9729,
"minFilter" : 9987,
"wrapS" : 33648,
"wrapT" : 33648
} ],

"buffers" : [ {
"uri" : "data:application/gltf-buffer;base64,AAABAAIAAQADAAIAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAACAPwAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAA",
"byteLength" : 108
} ],
"bufferViews" : [ {
"buffer" : 0,
"byteOffset" : 0,
"byteLength" : 12,
"target" : 34963
}, {
"buffer" : 0,
"byteOffset" : 12,
"byteLength" : 96,
"byteStride" : 12,
"target" : 34962
} ],
"accessors" : [ {
"bufferView" : 0,
"byteOffset" : 0,
"componentType" : 5123,
"count" : 6,
"type" : "SCALAR",
"max" : [ 3 ],
"min" : [ 0 ]
}, {
"bufferView" : 1,
"byteOffset" : 0,
"componentType" : 5126,
"count" : 4,
"type" : "VEC3",
"max" : [ 1.0, 1.0, 0.0 ],
"min" : [ 0.0, 0.0, 0.0 ]
}, {
"bufferView" : 1,
"byteOffset" : 48,
"componentType" : 5126,
"count" : 4,
"type" : "VEC2",
"max" : [ 1.0, 1.0 ],
"min" : [ 0.0, 0.0 ]
} ],

"asset" : {
"version" : "2.0"
}
}为 (参见图 13a) 的 PNG 文件。"testTexture.png"

添加图片注释,不超过 140 字(可选)

图 13a:简单纹理示例的图像。
在渲染器中将所有这些组合在一起将导致场景渲染在图 13b 中。

添加图片注释,不超过 140 字(可选)

图 13b:单位正方形上的简单纹理。
纹理材质定义
此示例中的材质定义与前面显示的 Simple Material 不同。虽然简单材质只为整个对象定义了一种颜色,但材质定义现在指的是新添加的纹理:
"materials" : [ {
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 0
},
"metallicFactor" : 0.0,
"roughnessFactor" : 1.0
}
} ],
这是将应用于对象表面的纹理的索引。和 仍然是单个值。下一节将介绍更复杂的材质,其中这些属性也通过纹理提供。baseColorTexturemetallicFactorroughnessFactor
为了将纹理应用于网格基元,必须有关于应用于每个顶点的纹理坐标的信息。纹理坐标只是 中定义的顶点的另一个属性。默认情况下,纹理将使用具有 attribute name 的纹理坐标。如果有多组纹理坐标,则可以通过向纹理引用添加属性来选择应用于一个特定纹理的坐标:mesh.primitiveTEXCOORD_0texCoord
"baseColorTexture" : {
"index" : 0,
"texCoord": 2
},
在这种情况下,纹理将使用包含在名为 的属性中的纹理坐标。TEXCOORD_2

posted @ 2025-07-12 10:55  吃饭不忘  阅读(32)  评论(0)    收藏  举报