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

时间:2015-01-05 10:14:04

标签: .obj wavefront

我正在使用c ++中的.obj处理程序。导入数据不应该是一个问题,但我不明白为什么有可能,.obj(例如从混合器导出)有更多的''条目不是' v' entires。如果有人能解释我的话,我会非常高兴!

谢谢!

3 个答案:

答案 0 :(得分:4)

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

在纹理空间中使用6种不同的矩形形状(每个面一个)来考虑一个盒子(8个顶点) - >这是6 * 4 = 24个纹理坐标。

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

Box-uv

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

LWO格式的命名引起了很多混乱。标记为“ v”的线实际上是定义点,而不是顶点。 定义面后,这些点将转换为顶点,从而得到一个立方体24个顶点,但只有8个点。