我有一个简单的程序来使用深度测试.它没有按预期工作.程序绘制X,Y轴和原点附近的球体.如果我没有打开GL_DEPTH_TEST,则会在轴上绘制球体.如果我打开GL_DEPTH_TEST,轴将被绘制在我不期望的球体上.谁能告诉我我做错了什么?
void
glwid::initializeGL()
{
glClearColor (0.0f, 0.0f, 0.0f, 1.0f);
}
void
glwid::resizeGL(int width, int height)
{
glViewport( 0, 0, (GLint)width, (GLint)height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective ( 90, (GLint)width/ (GLint)height, 0.0, 200.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glEnable (GL_DEPTH_TEST);
}
void
glwid::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0, 0, 100, 0, 0, 0, 0, 1, 0);
//
// X axis
//
glBegin( GL_LINES );
qglColor( green );
glVertex3f (-100.0, 0, 0. );
glVertex3f (100.0, 0, 0. );
glEnd();
//
// Y axis
//
glBegin( GL_LINES );
qglColor( red );
glVertex3f (0.0, 100.0, 0. );
glVertex3f (0.0, -100, 0. );
glEnd();
//
// sun
//
glTranslated (5, 0, 20);
GLUquadricObj *sphere_quadric = gluNewQuadric();
glColor3ub (255, 255, 0);
gluQuadricDrawStyle(sphere_quadric, (GLenum)GLU_SMOOTH);
gluSphere(sphere_quadric, 10, 36, 36);
}
Run Code Online (Sandbox Code Playgroud)
And*_*rew 13
我试过你的代码.问题在于resizeGL()功能.问题是你的投入
gluPerspective ( 90, (GLint)width/ (GLint)height, 0.0, 200.0 );
Run Code Online (Sandbox Code Playgroud)
0.0值作为第三个参数.以0.01为例 - 一切都会好的.那是因为这个参数应该总是正面的:http: //www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml
也(GLint)width/ (GLint)height改为(GLfloat)width/ (GLfloat)height否则结果会很奇怪.
而且最好把glEnable(GL_DEPTH_TEST)进入initializeGL()功能