我是OpenGL的新手,我在屏幕上显示一个简单的多维数据集时遇到问题。问题是应该隐藏在背景中的立方体的两侧仍然出现。我觉得答案应该是我必须启用GL_DEPTH_TEST,但这会导致屏幕显示一个完整的白色画布,上面没有任何内容。这是我已经完成的一次运行的样本:
每一面都是随机颜色。
以下是我的代码片段:
glutInit(&argc, argv);
glutInitWindowSize(600, 400);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50.0, 1.5, 1.0f, 100.0);
gluLookAt(10.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
//glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glClearColor(1.0, 1.0, 1.0, 1.0); /* white */
我现在已经注释掉了glEnable(GL_DEPTH_TEST)。
我还应该做什么才能让这个立方体上没有重叠?
感谢您的帮助!
答案 0 :(得分:2)
启用GL_DEPTH_TEST
,并在使用glClear(GL_DEPTH_BUFFER_BIT);
进行渲染之前清除深度缓冲区。
如果您使用glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
结合使用
答案 1 :(得分:1)
除了@immibis关于深度缓冲的说法之外,您还可以打开背面剔除并确保绘制面向正确方向的图元。要做到这一点:
glEnable (GL_CULL_FACE);
glCullFace (GL_BACK);
glFrontFace (GL_CW); // This says you define your primitives in clockwise order
这导致指向远离相机的面部不能被绘制,这可以提高性能,并且也可以消除这个特定问题。 (但你也可能想要使用深度缓冲区。)