我正在构建一个图形应用程序,用户可以通过单击画布指定顶点,然后使用顶点绘制多边形。
该应用程序支持线,三角和多边形模式。通过计算点击次数来绘制线和三角形。然后创建顶点数组,并将数据绑定到缓冲区并使用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]);
答案 0 :(得分:1)
为什么 polygonVertices 指向指针?如果你把它转换为(void*)
,OpenGL唯一看到的就是每个指向的指针的值。您希望它们是一个数组,因此它们的类型签名应与float*
(不是float**
)兼容。指向指针的指针仅对 glMultiDrawArrays 调用有意义。