[英]OpengGL glDrawElements draws lines but not triangles
我有以下代码:
for(auto m:shapes) {
glVertexPointer(3, GL_DOUBLE, 0, m->verts);
glNormalPointer(GL_DOUBLE, 0, m->normals);
glDrawElements(GL_TRIANGLES, m->num_triangles*3, GL_UNSIGNED_INT, m->indices);
}
(在图片中,圆圈和关键点无关紧要,它们是由其他代码绘制的。抱歉,我无法发布图片,我是新用户...)
http://dl.dropbox.com/u/5269/Screen%20shot%202011-12-10%20at%2012.38.28%20PM.png
似乎什么也没画。
如果我将GL_TRIANGLES更改为GL_LINES:
for(auto m:shapes) {
glVertexPointer(3, GL_DOUBLE, 0, m->verts);
glNormalPointer(GL_DOUBLE, 0, m->normals);
glDrawElements(GL_TRIANGLES, m->num_triangles*3, GL_UNSIGNED_INT, m->indices);
}
http://dl.dropbox.com/u/5269/Screen%20shot%202011-12-10%20at%2012.44.56%20PM.png
因此,似乎在文本缓冲区中坐标是有效的,索引缓冲区也可以。 glGetError返回0。最奇怪的是,相同的代码适用于由相同源生成的其他顶点缓冲区。
有任何想法吗?
您是否对两个示例都使用了完全相同的m->索引 (顺便说一下,它们也与Brett Hale指出的一样,因为您可能没有更改第二个示例中的枚举常量)?
GL_LINES期望成对的流,其中GL_TRIANGLES期望成对的三胞胎。 我不知道您是如何填充m-> indices的 ,但是如果您执行了以下操作:
0 1 1 2 2 3 3 4 4 5 5 6 ...
您可能会遇到相同的问题。 当您将流解释为成对构成时,您可能会看到所有分段:
01 12 23 34 45 56 ...
但是,当您将它们解释为三元组时,会得到三角形,使得两个顶点重合,因此它们是退化的,因此不会绘制。
011 223 344 556 ...
对于两个调用,您也不太可能成功使用相同的表达式m-> num_triangles * 3 。 也许这是帖子中的另一个问题,您确实在代码中进行了更改。 看看glBegin手册页 。
尝试在for循环之前将多边形模式设置为GL_LINE(glPolygonMode)。 如果您看到线条,则可能是2D绘图的投影矩阵所引起的。 另外,您在第二张图片中显示的行是否正确? 在我看来是随机的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.