我现在有一个汽缸

glPushMatrix();
glTranslatef(cylinder->pos[0], cylinder->pos[1], cylinder->pos[2]);
glRotatef(cylinder->angle, -1.0, 0, 0);
gluDisk(quad, 0.0, cylinder->radius, 300, 90);
gluCylinder(quad, cylinder->radius, cylinder->radius, cylinder->height, 30, 1);
gluDeleteQuadric(quad);
glPopMatrix();

但它只渲染半个圆柱体而不是整个物体(半个朝向视图)。第二个问题是我不知道如何关闭气缸。胶盘只关闭圆柱体的底部,我不知道如何关闭顶部。

最佳答案

如果我明白你在描述什么,听起来你可能已经启用了背面剔除功能。您的代码中是否有glEnable(GL_CULL_FACE)调用?这将消除所有面对你的多边形。在任何情况下,一旦你画了一个两边都关闭的圆柱体,就可以保持它的启用状态。
应用将圆柱体移动到(0,0,高度)的平移后,可以使用另一个gluDisk()调用关闭顶部的圆柱体。为了正确起见,我相信你需要旋转关闭底部圆柱体的圆盘。否则,它将面向圆柱体的内部而不是外部,这会影响法线,并在应该可见时通过背面消隐来消除它。
就整体而言,它应该看起来像这样(未经测试):

glPushMatrix();
glTranslatef(cylinder->pos[0], cylinder->pos[1], cylinder->pos[2]);
glRotatef(cylinder->angle, -1.0f, 0.0f, 0.0f);
gluCylinder(quad, cylinder->radius, cylinder->radius, cylinder->height, 30, 1);
glPushMatrix();
glTranslatef(0.0f, 0.0f, cylinder->height);
gluDisk(quad, 0.0f, cylinder->radius, 30, 1);
glPopMatrix();
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
gluDisk(quad, 0.0f, cylinder->radius, 30, 1);
gluDeleteQuadric(quad);
glPopMatrix();

10-08 11:30