[英]OpenGL - drawing indices from OBJ using GL_TRIANGLE_STRIP
我试图创建一个OBJ解析器,该解析器将读取OBJ文件并使用GL_TRIANGLE_STRIP对其进行渲染。 我知道OBJ文件的行为类似于TRIANGLES,这就是为什么当我阅读面孔时,我将它们重新排列为STRIPS。
例子我有这样的脸
f 5 1 4
f 5 4 8
f 3 7 8
由于OBJ文件是基于1的索引,因此在将它们重新排列为负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绘制它们,但是我得到的输出是错误的。 在这里查看图片。
我基于使用GL_TRIANGLE_STRIP的OpenGL文档进行了安排,由于使用GL_TRIANGLES对我有效,因此我坚持这一步骤。 什么会导致错误的输出?
.obj文件包含适合在GL_TRIANGLES模式下呈现的索引。 您以GL_TRIANGLES_STRIP模式渲染它们。 您在这里完全错了。 以GL_TRIANGLES模式渲染它们并感到高兴。
在其他模式下渲染相同的索引数据几乎总是不正确的。 GL_TRIANGLES模式每个三角形使用三个索引,而GL_TRIANGLE_STRIP平均每个三角形使用一个索引(它是压缩格式)。 因此,除非您将索引数据压缩了大约三倍,否则您将无法使用索引以GL_TRIANGLE_STRIP进行绘制。
有关详细信息,请参见Wikipedia文章 。 在下面,您可以在GL_TRIANGLE_STRIP中看到渲染索引{0,1,2,3,4,5,6}的结果 。 显然,如果以GL_TRIANGLES模式渲染它们, 则只会看到2个三角形,而不是5个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.