我正在构建一个图形应用程序,用户可以通过单击画布指定顶点,然后顶点用于绘制多边形。
该应用程序支持线、三角形和多边形模式。通过计算点击次数来绘制一条线和三角形。然后创建顶点数组并将数据绑定到缓冲区并使用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]);