具有不同形状的OpenGL glDrawArrays

时间:2018-10-24 00:47:14

标签: c++ opengl

对于作业,我需要编写一个程序,第一次单击将绘制一个点,第二次单击将绘制一条线,第三次单击将绘制一个三角形。所有这些都是在OpenGL中完成的。

我不需要任何代码,但是由于这是我的新手,所以我很难理解如何使用glDrawArrays()将其发送到GPU,因为该函数采用了{{ 1}}。我知道我想继续将点附加到数组中-但是随着模式不断变化(GL_POINTS,GL_LINE_LOOP,GL_TRIANGLES),我不知道如何存储它。

任何人和所有概念上的帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您说过您不想要代码,但老实说,我可以尝试用很多单词给出一个蓬松的解释,或者我可以用代码简洁地解释它。

假设您的顶点缓冲区中有 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

假设您继续在顶点缓冲区的末尾添加新点,这将绘制到此为止创建的所有三角形,再加上最新的尚未完整的三角形的任何单个点或线。