对于作业,我需要编写一个程序,第一次单击将绘制一个点,第二次单击将绘制一条线,第三次单击将绘制一个三角形。所有这些都是在OpenGL中完成的。
我不需要任何代码,但是由于这是我的新手,因此我很难理解如何使用glDrawArrays()将其发送到GPU,因为该函数需要使用mode
。我知道我想继续将点附加到数组中-但是随着模式不断变化(GL_POINTS,GL_LINE_LOOP,GL_TRIANGLES),我不知道如何存储它。
任何概念上的帮助将不胜感激。
最佳答案
您说过您不想要代码,但是老实说,我可以尝试用很多单词给出一个松散的解释,或者我可以在代码中简洁地解释它。
假设您的顶点缓冲区中有 N个顶点。似乎您想要这样的东西:
int num_extra_verts = N % 3;
int num_tri_verts = N - num_extra_verts;
// Draw triangles
if (num_tri_verts > 0)
glDrawArrays(GL_TRIANGLES, 0, num_tri_verts);
// Draw point or line
if (num_extra_verts == 1)
glDrawArrays(GL_POINTS, num_tri_verts, 1);
else if (num_extra_verts == 2)
glDrawArrays(GL_LINES, num_tri_verts, 2); // GL_LINE_LOOP not needed for single line
假设您继续在顶点缓冲区的末尾添加新点,这将绘制到目前为止创建的所有三角形,以及最新的(尚未)整个三角形的任何单个点或线。
关于c++ - 具有不同形状的OpenGL glDrawArrays,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52959633/