我试图创建一个OBJ解析器,它将读取OBJ文件并使用GL_TRIANGLE_STRIP渲染它。我知道OBJ文件表现为三角形,这就是为什么当我阅读这些面孔时,我将它们重新排列成STRIPS。
示例我有这样的面孔
f 5 1 4
f 5 4 8
f 3 7 8
在重新排列它们减去1后它将按此顺序排列,因为OBJ文件是基于1的索引。
f 4 0 3
f 3 0 4
f 0 4 3
f 3 4 7
f 4 7 2
f 2 7 6
f 7 6 7
我将这些索引发送给OpenGL并使用glDrawElements绘制它们,但我得到的输出是错误的。看一下here的图片。
我根据使用GL_TRIANGLE_STRIP的OpenGL文档进行了安排,我坚持这一步,因为使用GL_TRIANGLES对我有用。什么会导致不正确的输出?
答案 0 :(得分:0)
.obj 文件包含适合在 GL_TRIANGLES 模式下呈现的索引。您可以在 GL_TRIANGLES_STRIP 模式下渲染它们。你在这里完全错了。以 GL_TRIANGLES 模式渲染它们并感到高兴。
在其他模式下渲染相同的索引数据几乎总是不正确的。 GL_TRIANGLES 模式每个三角形使用三个索引,而 GL_TRIANGLE_STRIP 平均每个三角形使用一个索引(它是压缩格式)。因此,除非您已经将索引数据压缩了大约三次,否则您无法使用索引绘制为 GL_TRIANGLE_STRIP 。
有关详细信息,请参阅wikipedia article。您可以在下面看到 GL_TRIANGLE_STRIP 中呈现索引 {0,1,2,3,4,5,6} 的结果。显然,如果你在 GL_TRIANGLES 模式下渲染它们,你只会看到2个三角形而不是5个。