3D格式:obj和重复顶点

时间:2011-04-29 14:58:23

标签: python 3d

我正在编写一个python转换器,它接收一个.obj文件并以另一种格式输出。我注意到.obj文件有很多重复的顶点,很多面都引用了这些副本。

所以我编写的脚本只添加一个顶点并忽略任何重复,如果任何面引用了重复的顶点,我只需将其重定向到正确的索引。

我通过使用字典检查dupes,其中键是x,y,z值,值只是“1”,因此我可以将其添加为条目。然后我检查密钥是否存在以确定所讨论的顶点是否是欺骗。

但obj文件有重复顶点的原因是什么?如果我决定取出所有重复的条目,结果模型是否不同?我有一个特殊的obj文件有2849个顶点,除了845个重复。

2 个答案:

答案 0 :(得分:2)

您应该使用set()而不是字典来存储您的唯一顶点,您将不再需要使用虚拟值。

关于重复的顶点,它似乎是模型制作软件的“bug”或软件开发者的“bug”(have a look here

答案 1 :(得分:2)

很可能是因为在OpenGL中渲染对象的方式。根据您想要设置渲染的方式,OBJ文件非常易于在OpenGL中读取和渲染。他们可能有重复顶点的一个原因是,如果你想要交错的顶点数组,最终可能更容易从具有重复顶点的OBJ文本文件创建交错数组而不是非重复顶点,因为使用GL_TRIANGLES调用glDrawArrays()需要一行中定义一个面的三个顶点,它不使用索引。缺少glDrawArrays的索引使得必须具有重复的顶点。当然,可能会有某些聪明的c ++技巧,我不知道可以绕过这个限制,但我还是没想到它。