我有以下代码:
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
所以似乎坐标在vertext缓冲区中有效,索引缓冲区也可以。 glGetError返回0.最奇怪的是,相同的代码适用于由同一源生成的其他顶点缓冲区。
有什么想法吗?
答案 0 :(得分:0)
尝试在for循环之前将多边形模式设置为GL_LINE(glPolygonMode)。如果您看到线条,则可能是您的投影矩阵用于2D绘图。另外,您在第二张图片中显示的线条是否正确?对我来说是随机的。
答案 1 :(得分:0)
对于这两个示例,您是否使用了相同的 m->索引(顺便说一下,这与Brett Hale指出的相同,因为您可能没有更改枚举常量第二个例子)?
GL_LINES 期望成对的流,其中 GL_TRIANGLES 期望三元组流。我不知道你是如何填写 m->指数的,但如果你做了这样的事情:
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 Man Page。