【问题标题】:Vertex normal, texture uv coordinate顶点法线,纹理uv坐标
【发布时间】:2020-04-30 21:43:14
【问题描述】:

我有一个 gltf 问题:在 gltf 中,一个顶点是否必须对应一个顶点法线和一个顶点纹理 uv 坐标?如果我有一种源格式的模型,其中一个顶点可以对应三个顶点法线。如何将此类模型导出到 glTF 文件?

示例: 源格式模型中的立方体:8 个顶点,24 个顶点法线。 glTF 文件中的一个立方体:我需要写 24 个顶点和 24 个顶点法线吗?

【问题讨论】:

    标签: gltf


    【解决方案1】:

    是的,glTF 导出器/写入器必须在出现不连续 UV 或法线的任何位置“拆分”顶点。

    glTF 旨在成为一种支持 GPU 的交付格式,一种最后一英里的格式,而不是艺术家交换格式。因此,它的内部数据结构与将顶点属性传递给 GPU 的方式几乎是 1:1 匹配,例如vec3 位置属性、vec3 正常属性,可能还有vec2 纹理典型案例中的协调。所以是的,每个顶点一个法线和一个 UV,正如预期的一组原始数据提供给 GPU。

    部分优势在于精心策划的 glTF 文件集合将包含可以设置为(例如)移动设备的二进制有效负载,然后这些移动设备可以将二进制数据的整个部分直接传输到 GPU 内存无需进一步处理。例如,WebGL 框架在接收到文件后不必进行大量顶点处理,它们只需加载并渲染即可。负担明确地放在了导出者和编写者身上,而不是读取者和加载者身上。

    glTF Tutorial 中详细说明了有关结构的更多详细信息。特别是Buffers, Buffer Views, and Accessors 部分涵盖了二进制 blob 中顶点数据的原始存储。通常,熟悉图形 API 的程序员可以将 glTF accessor 视为单独的顶点属性,将 bufferView 视为包含多个顶点属性(访问器)的 GPU 内存块,可能是interleavedbuffer 本身只是 glTF 中所有二进制数据(bufferViews)的集合,没有任何跨度。

    【讨论】:

    • 感谢您的详细解释。这对我帮助很大!
    猜你喜欢
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2012-05-21
    • 2016-05-02
    相关资源
    最近更新 更多