OpenGL:Triangle Strip Loop - 如何画圆柱?

时间:2015-10-13 21:24:00

标签: opengl

我试图使用OpenGL绘制一个空心圆柱体。 (火箭的主体。)我目前正在使用GL_TRIANGLE_STRIP来做这件事。

这是我生成"顶点":

的方法
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);

这会产生一个三角形条带,但不会加入&#34;火箭体的最后一部分&#34;。圆柱体的矩形切片未被绘制。

我可以通过改变&#34; 20&#34;来纠正这个问题。到了&#34; 22&#34;在for循环索引i中。或者我可以将步骤更改为:step = 2.0 * PI / 18.0。因此,我会在其他观点之上绘制点数。这似乎可能不是最好的方法。

我可以使用更好的方法吗?我很确定没有TRIANGLE_STRIP_LOOP这样的对象。

1 个答案:

答案 0 :(得分:2)

  

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

您需要重复圆柱的两个起点才能将其关闭。您可以通过重复顶点(对于像这样的简单模型非常容易和最小的影响)或使用元素缓冲区多次指定顶点来做到这一点(对于更复杂的顶点重复更复杂的模型更好,这不是这里的情况)。