处理 .obj 文件:为什么顶点纹理 (vt) 可能比顶点 (v) 多?

Handling .obj files: Why is it possible to have more vertextextures (vt) than vertices (v)?

我正在使用 C++ 编写 .obj 处理程序。导入数据应该不是问题,但我不明白为什么 .obj(例如从搅拌机导出)有比 'v' 个条目更多的 'vt' 个条目。如果有人能给我解释一下,我会很高兴!

谢谢!

位置、法线和纹理坐标的数量可能不同,因为两个顶点可能在一个 space 中共享一个坐标,但在另一个中不同。

想象一个盒子(8 个顶点)在纹理中使用 6 个不同的矩形(每个面一个)space -> 那是 6*4=24 个纹理坐标。

编辑: 盒子的常见 uv-map 如下所示(14 个纹理坐标)。我注释了三个不同的顶点:ABC。请注意,在一个盒子中,每个顶点都与三个面相邻,这在 uv-map 中也必须为真。 C 得到一个与三个面相邻的纹理坐标,但是 B 必须复制并且 A 三倍才能这样做。

我找到了问题的根源。我过早地优化了我的程序,并且没有意识到纹理坐标可能比顶点坐标的数量更大,因为纹理是按面而不是每个顶点映射的,所以每个顶点可以映射到许多纹理坐标.希望有人能从我的错误中吸取教训。

我发现有些奇怪的事情是在 运行 之前初始化一个 sf::RenderWindow 我的 .obj 解析器导致没有抛出错误消息并且在完全不同的区域报告崩溃比实际发生的要多。

LWO 格式的命名引起了很多混乱。标记为 'v' 的线实际上是定义点而不是顶点。 当面被定义时,这些点被转换成顶点,这给了一个立方体 24 个顶点,但只有 8 个点。