|
|
这是一个困扰我达半年之久的问题,使用深度测试后不仅不能消隐,而且还带有闪烁。程序源代码如下,可以编译运行,望各位大侠不吝赐教。
#include <math.h>
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
static GLfloat angle=0;
static GLfloat centerx=0,centery=0,centerz=0,eyex=0,eyey=0,eyez=2;
void Init(void)
{
glClearColor(0,0,0,1.0);
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);
glEnable (GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_TRUE);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(2 * sin((180/3.141592654)*angle + 3.141592654),eyey,-2 * cos((180/3.141592654)*angle +3.141592654),0,0,0,0.0,1.0,0.0);
glRotatef(angle,0,1,0);
glBegin(GL_POLYGON);
glColor3f(1.0,0.0,0.0);
glVertex3f(1,1,0);
glVertex3f(1,-1,0);
glVertex3f(-1,-1,0);
glVertex3f(-1,1,0);
glEnd();
glBegin(GL_POLYGON);
glColor3f(0.0,1.0,0.0);
glVertex3f(0,1,-1);
glVertex3f(0,1,1);
glVertex3f(0,-1,1);
glVertex3f(0,-1,-1);
glEnd();
glutSwapBuffers();
}
void spinDisplay()
{
angle += 0.00001;
glutPostRedisplay();
}
void reshape(int w,int h)
{
glViewport(0,0,(GLsizei) w,(GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,(GLfloat)w/(GLfloat)h,0.0,5.0);
}
void mouse(int button, int state, int x, int y)
{
switch(button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
glutIdleFunc(spinDisplay);
break;
case GLUT_RIGHT_BUTTON:
if (state == GLUT_DOWN)
glutIdleFunc(NULL);
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("depthTest");
Init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
|
|