QOpenGLWidget Beispiel für stereoskopisches Rendering

Dieses Beispiel zeigt, wie man eine minimale QOpenGLWidget basierte Anwendung 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 Stereounterstützung, 3D-Brillen und spezielle Monitore.

Hinweis: In diesem Beispiel werden zwei Bilder in zwei getrennten Puffern gerendert. Wenn Sie die Bilder durch eine 3D-Brille betrachten, entsteht ein holografischer 3D-Effekt.

Das obige Bild wird in den linken Puffer gerendert.

Das obige Bild wird in den rechten Puffer gerendert.

Einstellen des richtigen Oberflächenflags

Um das stereoskopische Rendering zu aktivieren, müssen Sie das Flag QSurfaceFormat::StereoBuffers global setzen. Es reicht nicht aus, dies nur im Widget zu tun, da die Flagge intern gehandhabt wird. Am sichersten ist es, dies mit QSurfaceFormat::SetDefaultFormat vor dem Start der Anwendung zu tun.

QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);

// Enable stereoscopic rendering support
format.setStereo(true);

QSurfaceFormat::setDefaultFormat(format);

Zweimaliges Rendering

Nachdem QSurfaceFormat::StereoBuffers gesetzt ist, wird paintGL() zweimal aufgerufen, einmal für jeden Puffer. In paintGL() können Sie currentTargetBuffer() aufrufen, um abzufragen, welcher TargetBuffer gerade aktiv ist.

Im folgenden Schnipsel wird die Matrix leicht verschoben, damit die Eckpunkte nicht übereinander gerendert werden. Dies ist ein einfaches Beispiel, um zu sehen, dass, wenn die notwendige Unterstützung vorhanden ist, man zur Laufzeit zwei Objekte sehen sollte, 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);

Beispielprojekt @ code.qt.io

© 2025 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.