2013-12-11 13 views
9

Chciałbym renderować scenę 3D do różnych rzutni. rzutnie te są zawarte w „subwindows” z własnymi menu tak: enter image description hereWiele rzutni OpenGL z Qt 5

Każda rzutnia może być:

  • Zmieniono rozmiar;
  • Ukryty;
  • Wyświetlany na pełnym ekranie;
  • Przeniesiono do innej części aplikacji.

więc możemy mieć coś takiego: enter image description here

Uważam, że lepiej jest umieścić każdej rzutni w Qt Widget zawierający moje widżet OpenGL (czy to prawda?). Tak więc jak mogę renderować moją scenę 3D do kilku widgetów OpenGL Qt?

+0

Jestem ciekawy, czy widget Qt udostępnia wszystkie opcje "Widok", "Cieniowanie", "Oświetlenie"? Jak nazywa się ten widget? – sonofrage

Odpowiedz

4

Uważam, że lepiej jest umieścić każdej rzutni w Qt Widget zawierający moim widget OpenGL (czy to prawda?). Więc jak mogę uczynić mój sceny 3D na kilka widżetów Qt OpenGL?

Jak opisano w QGlWidget's detailed description oprócz nadrzędnymi initializeGL i paintGL, trzeba także zastąpić metodę resizeGL. W metodzie resizeGL należy dostosować port widoku i stożek ścięty.

Po tym wszystkim chodzi tylko o tworzenie i umieszczanie widżetów na ekranie. Mogą być całkowicie niezależne od siebie i można ustawić frustum różnie dla każdego.

Ponieważ chcesz udostępnić kontekst OpenGL między tymi widżetami, spójrz na OpenGL context sharing. Aby to zrobić, musisz przekazać obiekt kontekstowy OpenGL jako pierwszy parametr do konstruktora z QGLWidget.

+1

Dzięki za anser. Jeśli mam 8 QGlWidget, renderując jedną scenę 3D, muszę zainicjować OpenGL (VAO, VBO itp.) Tylko raz. Jak mogę "udostępnić" inicjalizację (i renderowanie?) Między tymi 8 różnymi obiektami? – Korchkidu

+3

@Korchkidu Używając wspólnego kontekstu OpenGL. Zobacz http://qt-project.org/doc/qt-5.0/qtgui/qopenglcontext.html#context-resource-sharing –

+0

@Korchkidu Ponadto, musisz utworzyć QGLWidget z określonym obiektem kontekstowym: http: // qt-project .org/doc/qt-4.8/qglwidget.html # QGLWidget-2 –