Beispiel für stereoskopisches Rendering mit QOpenGLWidget
Dieses Beispiel zeigt, wie man eine minimale Anwendung auf Basis von „ QOpenGLWidget “ mit Unterstützung für stereoskopisches Rendering erstellt.
Hinweis: Die Unterstützung für stereoskopisches Rendering setzt bestimmte Hardwarevoraussetzungen voraus, wie z. B. eine Grafikkarte mit Stereo-Unterstützung, eine 3D-Brille und bestimmte Monitore.
Hinweis: In diesem Beispiel werden zwei Bilder in zwei separate Puffer gerendert. Wenn man die Bilder durch eine 3D-Brille betrachtet, entsteht ein holografischer 3D-Effekt.

Das obige Bild wird in den linken Puffer gerendert.

Das obige Bild wird in den rechten Puffer gerendert.
Festlegen des richtigen Oberflächen-Flags
Um das stereoskopische Rendering zu aktivieren, müssen Sie das Flag „ QSurfaceFormat::StereoBuffers “ global setzen. Es reicht nicht aus, dies nur am Widget vorzunehmen, da das Flag intern auf eine bestimmte Weise verarbeitet wird. Am sichersten ist es, dies vor dem Start der Anwendung mit `QSurfaceFormat::SetDefaultFormat` zu tun.
QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
// Enable stereoscopic rendering support
format.setStereo(true);
QSurfaceFormat::setDefaultFormat(format);Zweimaliges Rendern
Nachdem „ QSurfaceFormat::StereoBuffers “ gesetzt wurde, wird `paintGL()` zweimal aufgerufen, einmal für jeden Puffer. In `paintGL()` können Sie `currentTargetBuffer()` aufrufen, um abzufragen, welcher `TargetBuffer` derzeit aktiv ist.
Im folgenden Codeausschnitt verschieben wir die Matrix leicht, damit die Scheitelpunkte nicht übereinander gerendert werden. Dies ist ein einfaches Beispiel, um zu zeigen, dass bei vorhandener Unterstützung zur Laufzeit zwei Objekte zu sehen sein sollten – eines links und eines rechts.
// Slightly translate the model, so that there's a visible difference in each buffer.
QMatrix4x4 modelview;
if (currentTargetBuffer() == QOpenGLWidget::LeftBuffer)
modelview.translate(-0.4f, 0.0f, 0.0f);
else if (currentTargetBuffer() == QOpenGLWidget::RightBuffer)
modelview.translate(0.4f, 0.0f, 0.0f);© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.