无法使用glDrawElements()&获取输出一个glMultiDrawElements()

时间:2013-09-09 03:51:35

标签: opengl opengl-3 vertex-array vertex-attributes vertexdata

我正在构建一个图形应用程序,用户可以通过单击画布指定顶点,然后使用顶点绘制多边形。

该应用程序支持线,三角和多边形模式。通过计算点击次数来绘制线和三角形。然后创建顶点数组,并将数据绑定到缓冲区并使用glDrawArrays()进行渲染。棘手的是多边形模式。用户可以指定任意数量的顶点并单击鼠标右键触发绘图。我最初计划使用glMultiDrawElements,但不知怎的,我没有得到任何输出。所以我试着在一个循环中调用glDrawElements()。仍然没有运气。我搜索了很多并阅读了很多关于将glDrawElements()/glMultiDrawElements()与VBO和VAO以及glVertexPointer()glColorPointer一起使用的文档。仍然没有运气。

我使用以下内容来跟踪顶点属性:     

GLfloat ** polygonVertices; //每个多边形顶点列表都会进入此...     
GLuint * polygonIndicesCounts; //用于保存每个多边形具有的顶点数的指针     
GLuint ** polygonIndices; //用于保存与多边形对应的顶点索引的指针数组     
GLfloat * polygonColors; //对于每次鼠标点击,颜色都是随机生成的。

以及渲染代码:

glVertexPointer(4, GL_FLOAT, 0, (GLvoid*)polygonVertices);
glEnableClientState(GL_VERTEX_ARRAY);

glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, (GLvoid*)polygonColors);

//glMultiDrawElements(GL_POLYGON, polygonIndicesCounts, GL_UNSIGNED_INT, polygonIndices, polygonCount);

for(int i = 0 ; i < polygonCount; i ++)
    glDrawElements(GL_POLYGON, polygonIndicesCounts[i], GL_UNSIGNED_INT, polygonIndices[i]);

1 个答案:

答案 0 :(得分:1)

为什么 polygonVertices 指向指针?如果你把它转换为(void*),OpenGL唯一看到的就是每个指向的指针的值。您希望它们是一个数组,因此它们的类型签名应与float*(不是float**)兼容。指向指针的指针仅对 glMultiDrawArrays 调用有意义。