不同形状的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的主要内容,如果未能解决你的问题,请参考以下文章