OpenGL ведет себя по-разному в Ubuntu и Windows - PullRequest
0 голосов
/ 16 октября 2019

Я использую 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 корректен для всех объектов, но отсечение неправильно.

1 Ответ

0 голосов
/ 18 октября 2019

Поскольку 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);

и теперь он работает для обеих ОС.

...