不同形状的OpenGL glDrawArrays

Posted

技术标签:

【中文标题】不同形状的OpenGL glDrawArrays【英文标题】:OpenGL glDrawArrays with different shapes 【发布时间】:2018-10-24 00:47:14 【问题描述】:

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

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

非常感谢任何和所有概念上的帮助。

【问题讨论】:

这甚至不是一个真正的 OpenGL 问题,是吗?它归结为“我如何根据变量的值做一件事或另一件事?” 【参考方案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

如果您继续在顶点缓冲区的末尾添加新点,这将绘制到目前为止创建的所有三角形,以及最近的尚未完整三角形的任何单个点或线。

【讨论】:

以上是关于不同形状的OpenGL glDrawArrays的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL 3.2+ 中渲染多个形状和对象?

在opengl中绘制几何图形

在 OpenGL 中绘制形状的标准(常用)方法是啥?

OpenGL形状不渲染

在opengl中翻译另一个形状内的形状

opengl 绘制和移动原始形状