OpenGL 在 ubuntu 和 windows 中的行为不同

OpenGL behaves differently in ubuntu and windows

我正在使用 wxGLContext 和 wxGLCanvas 进行 3D 可视化。我这样初始化opengl

SetCurrent(*canvas);
glEnable(GL_BLEND);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);

并绘制对象

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-w, w, -h, h, -10.0f, 10.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
quad = gluNewQuadric();
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL);
//draw the objects
gluDeleteQuadric(quad);
glFlush();

问题是此代码在 windows 中运行良好,但在 ubuntu 中,对象被位于后面的对象裁剪。 glFrontFace 对于所有对象都是正确的,但是裁剪是错误的。

正如评论中提到的HolyBlackCat, 问题是 wxGLContext 的深度缓冲区。 它通过使用 WX_GL_DEPTH_SIZE 8 和 16 而不是 32 来工作。

虽然,我仍然不知道,windows如何处理它而不出错,我更正了一些行如下

int AttribList[] = {WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0};
wxGLCanvas* glc = new wxGLCanvas(parent, wxID_ANY, AttribList,
                                 wxDefaultPosition, wxDefaultSize,
                                 wxFULL_REPAINT_ON_RESIZE);

现在它适用于两种操作系统。