OpenGL:三角形条环-如何绘制圆柱体?

OpenGL:三角形条环-如何绘制圆柱体?,opengl,Opengl,我正在尝试使用OpenGL绘制一个空心圆柱体。(火箭的身体。)我目前正在使用GL_三角形_条来完成这项工作 这就是我生成“顶点”的方式: 这将生成一个三角形条带,但不会连接“火箭体”的最后一部分。圆柱体上有一个未绘制的矩形切片 我可以通过将for循环索引I中的“20”改为“22”来纠正这个问题。或者我可以将步骤更改为:step=2.0*PI/18.0。因此,我将在其他点的顶部绘制点。这似乎不是最好的方法 有更好的方法吗?我相当肯定没有像三角形(STRIP)(LOOP)这样的物体 我可以通过将fo

我正在尝试使用OpenGL绘制一个空心圆柱体。(火箭的身体。)我目前正在使用
GL_三角形_条
来完成这项工作

这就是我生成“顶点”的方式:

这将生成一个三角形条带,但不会连接“火箭体”的最后一部分。圆柱体上有一个未绘制的矩形切片

我可以通过将
for
循环索引
I
中的“20”改为“22”来纠正这个问题。或者我可以将步骤更改为:
step=2.0*PI/18.0
。因此,我将在其他点的顶部绘制点。这似乎不是最好的方法

有更好的方法吗?我相当肯定没有像
三角形(STRIP)(LOOP)
这样的物体

我可以通过将for循环索引I中的“20”改为“22”来纠正这个问题。或者我可以将步骤更改为:step=2.0*PI/18.0。因此,我将在其他点的顶部绘制点。这似乎不是最好的方法


您需要重复圆柱体的两个起点来关闭它。您可以通过重复顶点(对于像这样的简单模型来说非常简单且影响最小)或使用元素缓冲区多次指定顶点(对于更复杂的模型来说更好,其中顶点重复的频率更高,这里不是这种情况)。

GLDrainElements如何帮助?我对文档有点困惑-它看起来与
glDrawArrays
相同me@user3728501它接受用于索引顶点数据的元素缓冲区,允许重复顶点。
GLfloat *rocket_body_verticies = new GLfloat[3 * 20];
for(int i = 0; i < 20; ++ i)
{
    const GLdouble step = 2.0 * CONST_PI / (double)(20);
    rocket_body_verticies[3 * i + 0] = 0.25 * std::cos(i * step);
    rocket_body_verticies[3 * i + 1] = 0.25 * std::sin((i * step + 0.5 * step));
    rocket_body_verticies[3 * i + 2] = 1.0 * (i % 2 == 0 ? -0.5 : 0.5);
}
glDrawArrays(GL_TRIANGLE_STRIP, 0, 20);