glTF:我们如何存储基本的几何图元?

glTF: how can we store basic geometry primitives?

我是 glTF 的新手,我有一个非常基本的,也许是幼稚的问题。抱歉,感谢您的理解和帮助。

我们有一个 C++ 应用程序,我们可以在其中处理几何基本实体,例如长方体、圆锥体、圆柱体等。

为了可视化我们目前使用的几何实体 Coin3D,它们具有相应的几何形状:长方体、圆锥体、...

我们现在也想添加一个 glTF 导出器,我已经开始探索 glTF 规范。 我必须说,在官方文档和网络上,我找不到 glTF 对基本几何形状的任何支持。

因此,我的问题是:

  1. 是真的吗,glTF 没有盒子或圆锥体的概念?还是我错过了一些明显的东西?

  2. 如果 1) 的答案是“否”,是否有 tested/supported/suggested 基本形状的实现?我只找到了一些“示例”形状,like the Box here;但我找不到任何基本形状的实现集合。再说一遍,我是不是漏掉了什么?

  3. 是否有关于如何在 glTF 中实现基本几何形状的最佳实践或文档?

简短的回答是你是对的,glTF 目前不直接将基本几何形状存储为长方体、圆锥体、圆柱体等。该格式旨在成为运行时交付格式,而不是资产交换格式。

因此,glTF 中的内部数据结构旨在模拟原始数据,这些原始数据通常会使用图形 API(例如 OpenGL、WebGL 等)输入 GPU。glTF 数据的整个块通常可以从磁盘或网络中取出并直接交给图形 API 进行渲染,只需最少的预处理。

这意味着您的所有基本形状都必须按照 GPU 期望的方式到达:三角化。即使是一个简单的盒子也是由十二个三角形组成的,因为边不共享法向量,法线的“顶点属性”是不同的,因此来自盒子不同边的三角形不共享顶点(同样,因为 GPU不会接受它作为原始输入)。好处是 WebGL 客户端在收到 glTF 时不必非常认真地考虑要做什么,它可以开始将数据塞入图形管道以使事情移动。

对于更广泛的概述,广受欢迎的 glTF - What the Duck diagram is widely considered an excellent starting point, and the glTF Tutorials 是对它的一个很好的跟进。