【问题标题】:3D formats: obj and duplicate vertices3D 格式:obj 和重复顶点
【发布时间】:2011-08-15 13:52:45
【问题描述】:

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

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

我使用字典来检查是否存在欺骗行为,其中键是 x、y、z 值,而值只是“1”,这样我就可以将其添加为条目。然后我检查密钥是否存在,以确定有问题的顶点是否是骗子。

但是 obj 文件有重复顶点是有原因的吗?如果我决定只取出所有重复的条目,结果模型是否不同?我有一个包含 2849 个顶点的特定 obj 文件,但其中 845 个是重复的。

【问题讨论】:

    标签: python 3d


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-14
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        • 2022-08-10
        • 2013-06-26
        • 2021-04-05
        • 1970-01-01
        相关资源
        最近更新 更多