opengl gluCylinder()不绘制底部和顶部

a7qyws3x  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(222)

使用OpenGL,我试图绘制一个圆柱体箭头(一个圆柱体和一个圆锥体)。我使用gluCylinder()绘制了一个圆柱体或圆锥体。但是圆柱体的底部和顶部是不可见的。谁能告诉我为什么?
下面是我使用的代码。

const double AXES_LEN = 300.0;
const double ARROW_LEN = 100.0;
const double ARROW_RADIUS = 30.0;

GLUquadricObj *objCylinder = gluNewQuadric();

glPushMatrix();
glColor3f(1.0f, 1.0f, 1.0f);
gluSphere(objCylinder, 15, 20, 20);
glPopMatrix();

glPushMatrix();
glColor3f(0.0f, 0.0f, 1.0f);
gluSphere(objCylinder, 0.25, 6, 6);
gluCylinder(objCylinder, 10, 10, AXES_LEN, 10, 5);            //z
//glTranslatef(0.0f, 0.0f, (GLfloat)AXES_LEN);
//gluCylinder(objCylinder, ARROW_RADIUS, 0, ARROW_LEN, 10, 5);  //blue arrow
glPopMatrix();

glPushMatrix();
glColor3f(0.0f, 1.0f, 0.0f);
glRotatef(-90, 1.0, 0.0, 0.0);
gluCylinder(objCylinder, 15, 15, AXES_LEN, 10, 5);             //Y North arrow
glTranslatef(0.0f, 0.0f, (GLfloat)AXES_LEN);
gluSphere(objCylinder, ARROW_RADIUS, 20, 20);
gluCylinder(objCylinder, ARROW_RADIUS*2, 2 , ARROW_LEN*2, 10, 5);   //green arrow
glPopMatrix();

glPushMatrix();
glColor3f(1.0f, 0.0f, 0.0f);
glRotatef(-90, 0.0, 1.0, 0.0);
gluCylinder(objCylinder, 10, 10, AXES_LEN, 10, 5);              //X
//glTranslatef(0.0f, 0.0f, (GLfloat)AXES_LEN);
//gluCylinder(objCylinder, ARROW_RADIUS, 0, ARROW_LEN, 10, 5);    //red arrow
glPopMatrix();

// RESTORE VIEW STATES
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
zpjtge22

zpjtge221#

看起来,因为gluCylinder是只绘制侧曲面的函数。
如果要绘制顶面和底面,可以使用gludisk

相关问题