波前 obj 模型加载器索引问题

Posted

技术标签:

【中文标题】波前 obj 模型加载器索引问题【英文标题】:wavefront obj model loader indexing issues 【发布时间】:2012-08-15 12:00:09 【问题描述】:

大家好,我很难让 .obj 波前文件使用 IBO 正确渲染。

现在我编写了一个解析器,目前它非常简单,但它会加载顶点和法线。如果我绑定解析后的顶点和法线,我会得到很好的结果,但如果我将索引绑定为 GL_element... 我会变得一团糟。

现在我已经研究了大约一个星期,我在这里检查了至少 20 页,最后决定提出一个问题。

我不太确定出了什么问题,所以我带来了我的代码、我写到控制台的一些调试信息、我从程序中写出的文件、屏幕截图和视频。我真的希望这里有人可以帮助我度过这个难关。

粘贴箱:http://pastebin.com/uZs74DSn

您可以从 pastebin 中看到,我已经通过从所有索引中减去 1 来说明 .obj 文件不是从零开始的。

视频: 1.http://www.youtube.com/watch?v=tfqhDEMCjPA&feature=plcpmonkey用glarrays解析绘制。

    http://www.youtube.com/watch?v=SDeJk7sv2ZA&feature=plcp 解析完全相同的模型,但使用 gldrawelements 绘制。

    http://www.youtube.com/watch?v=3_HS8Q7FXsk&feature=plcp 使用 gldrawelements 解析和绘制的球体

    http://www.youtube.com/watch?v=w6Oqy3JdTRg&feature=plcp 我在 opengame art 上找到的模型,使用 lineloops 渲染,但由于我使用了 glarray,所以它很好。

    http://www.youtube.com/watch?v=xHiCcK5QuE0&feature=plcp 使用 glarrays 渲染了许多基本形状并且光线充足。

我真的很茫然,希望有人能帮助我度过这个难关。我想继续学习着色器。这对于外面的人来说可能是微不足道的,我希望他们能够停下来并给出指导意见!

蓝蜂

【问题讨论】:

【参考方案1】:

再看一遍后,我认为真正发生的情况是您的偏移量并不是您认为的那样。您正在读取数据,并且顶点被重复,并且您多次将重复数据写入顶点缓冲区。因此,当您稍后想要引用索引 4 时,实际上您在顶点数组的该位置拥有来自顶点 2 的数据。

尝试对顶点数据进行预排序并将其全部写入,以使您的顶点数组不大于 [max_index_number * 3],然后按原样将您的索引输出。我认为这可能有效。

【讨论】:

以上是关于波前 obj 模型加载器索引问题的主要内容,如果未能解决你的问题,请参考以下文章

解析波前 obj 文件格式

obj 模型加载纹理坐标和顶点位置未正确加载

波前 OBJ 文件可以具有每个对象(或每个组)的顶点吗?

WaveFront .obj 加载器未按应有的方式显示对象(VBO 和 VAO)

在web端,three.js如何操作3d模型obj对象的子构件

如何为three.js模型加载器将对象转换为json文件