0

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

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

我使用以下方法来跟踪顶点属性:

GLfloat ** 多边形顶点;//每个多边形顶点列表都进入这个..
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]);
4

1 回答 1

1

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

于 2013-09-09T10:20:32.270 回答