Exemple de rendu stéréoscopique avec QOpenGLWidget
Cet exemple montre comment créer une application minimale basée sur l'QOpenGLWidget, prenant en charge le rendu stéréoscopique.
Remarque : la prise en charge du rendu stéréoscopique nécessite certaines configurations matérielles, telles qu’une carte graphique compatible stéréo, des lunettes 3D et des écrans spécifiques.
Remarque : cet exemple affiche deux images dans deux tampons distincts. Lorsque vous visualisez ces images à l'aide de lunettes 3D, elles produisent un effet holographique en 3D.

L'image ci-dessus correspond à ce qui sera affiché dans le tampon de gauche.

L'image ci-dessus correspond à ce qui sera affiché dans le tampon de droite.
Définition du drapeau de surface approprié
Pour activer le rendu stéréoscopique, vous devez définir globalement l’indicateur « QSurfaceFormat::StereoBuffers ». Il ne suffit pas de le faire au niveau du widget en raison de la manière dont cet indicateur est géré en interne. Le plus sûr est de le faire via QSurfaceFormat::SetDefaultFormat avant de lancer l’application.
QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
// Enable stereoscopic rendering support
format.setStereo(true);
QSurfaceFormat::setDefaultFormat(format);Rendu en deux étapes
Une fois le drapeau « QSurfaceFormat::StereoBuffers » défini, la fonction paintGL() sera appelée deux fois, une fois pour chaque tampon. Dans paintGL(), vous pouvez appeler currentTargetBuffer() pour déterminer quel tampon cible (TargetBuffer) est actuellement actif.
Dans l'extrait de code suivant, nous translatons légèrement la matrice afin d'éviter que les sommets ne s’affichent les uns par-dessus les autres. Il s’agit d’un exemple simple visant simplement à montrer que, si la prise en charge nécessaire est disponible, vous devriez voir deux objets à l’exécution, l’un à gauche et l’autre à droite.
// 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.