使用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();
1条答案
按热度按时间zpjtge221#
看起来,因为
gluCylinder
是只绘制侧曲面的函数。如果要绘制顶面和底面,可以使用
gludisk
。