我试图使用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
这样的对象。
答案 0 :(得分:2)
我可以通过在for循环索引i中将“20”更改为“22”来纠正此问题。或者我可以将步骤更改为:step = 2.0 * PI / 18.0。因此,我会在其他观点之上绘制点数。这似乎可能不是最好的方法。
您需要重复圆柱的两个起点才能将其关闭。您可以通过重复顶点(对于像这样的简单模型非常容易和最小的影响)或使用元素缓冲区多次指定顶点来做到这一点(对于更复杂的顶点重复更复杂的模型更好,这不是这里的情况)。