2011-04-29 162 views
2

我正在写一个python转换器,它需要一个.obj文件并以另一种格式输出它。我注意到.obj文件有很多重复的顶点,并且很多面指向这些重复项。3D格式:obj和重复的顶点

因此,我编写脚本只添加一个顶点并忽略任何重复,如果任何脸部引用重复的顶点,我只需将其重定向到正确的索引即可。

我使用字典检查dupe,其中的键是x,y,z值,值只是“1”,所以我可以将其添加为条目。然后我检查是否存在关键字来确定所讨论的顶点是否是重复的。

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

回答

2

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

关于复制的顶点,这似乎是一个模型制作软件的“错误”或者是因为对象是如何在OpenGL渲染的软件developper(have a look here

2

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