OpenGL /过剩背景多边形看起来与前景多边形重叠

时间:2013-12-05 03:06:08

标签: c opengl glut

我是OpenGL的新手,我在屏幕上显示一个简单的多维数据集时遇到问题。问题是应该隐藏在背景中的立方体的两侧仍然出现。我觉得答案应该是我必须启用GL_DEPTH_TEST,但这会导致屏幕显示一个完整的白色画布,上面没有任何内容。这是我已经完成的一次运行的样本:

example

每一面都是随机颜色。

以下是我的代码片段:

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)。

我还应该做什么才能让这个立方体上没有重叠?

感谢您的帮助!

2 个答案:

答案 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

这导致指向远离相机的面部不能被绘制,这可以提高性能,并且也可以消除这个特定问题。 (但你也可能想要使用深度缓冲区。)