QOpenGLWindow проблемы с z-порядком

Я работаю над обновлением приложения для клиента.

Они используют Qt и в настоящее время используют QGLWidget для отображения в полноэкранном режиме 1 из 4 возможных камер, выбранных щелчком соответствующего переключателя. Затем они используют OpenGL для рисования на отображаемом изображении. Это отлично работает, но они хотят обновить пользовательский интерфейс, чтобы включить четырехкратное представление всех 4 камер.

Моя первая мысль о том, как этого добиться, заключалась в том, чтобы оставить один виджет QGLWidget для полноэкранного отображения и иметь 4 небольших виджета QGLWidget для разделения на квадраты. Из документации я обнаружил, что вы не можете перекрывать QGLWidgets или QOpenGLWidgets, потому что они не обрабатывают z-порядок должным образом, но это можно сделать с помощью QOpenGLWindows и QWidget :: createWindowContainer.

Итак, я закодировал приложение, которое использует QOpenGLWidget (пытается обновить их) для полноэкранного просмотра и 4 меньших QOpenGLWindows с помощью QWidget :: createWindowContainer, но это тоже не работает.

Виджеты, созданные из QOpenGLWindows, всегда находятся наверху, даже если я использую lower (), чтобы попытаться разместить их за полноэкранным QOpenGLWidget. Я также пробовал использовать hide () для виджетов, созданных из QOpenGLWindows, однако это не повлияло.


person muench    schedule 12.11.2019    source источник
comment
Отображение (по крайней мере части) вашего кода поможет другим быстрее находить ошибки.   -  person user3486184    schedule 12.11.2019


Ответы (1)


Сделайте это на более низком уровне. Сохраните один QGLWidget - фактически не трогайте свои объекты Qt. Вместо этого измените рендеринг нижнего уровня так, чтобы он выполнял 4 вызова glViewport.

После каждого вызова glViewport обновляйте вид модели, проекцию и матрицы в соответствии с интересующей камерой, затем нарисуйте 3D-сцену.

Это просто и эффективно, потому что драйверу нужно иметь дело только с одним контекстом OpenGL. Возможно, вам придется немного поработать, чтобы настроить ввод с помощью мыши, но я думаю, что это того стоит.

person prideout    schedule 12.11.2019
comment
Спасибо! Это отличный способ подойти к этому! - person muench; 15.11.2019