Exemple de rendu stéréoscopique avec QOpenGLWidget
Cet exemple montre comment créer une application minimale basée sur QOpenGLWidget avec le support du rendu stéréoscopique.
Note : La prise en charge du rendu stéréoscopique nécessite certaines conditions matérielles, telles qu'une carte graphique avec prise en charge stéréoscopique, des lunettes 3D et des moniteurs spécifiques.
Remarque : cet exemple effectue le rendu de deux images dans deux tampons distincts. Lorsque vous regardez les images avec des lunettes 3D, elles donnent un effet holographique 3D.

L'image ci-dessus est celle qui sera rendue dans la mémoire tampon de gauche.

L'image ci-dessus est celle qui sera rendue dans le tampon de droite.
Définir l'indicateur de surface correct
Pour activer le rendu stéréoscopique, vous devez définir le drapeau QSurfaceFormat::StereoBuffers de manière globale. Le fait de le faire sur le widget n'est pas suffisant en raison de la façon dont le drapeau est géré en interne. Le plus sûr est de le faire avec QSurfaceFormat::SetDefaultFormat avant de démarrer l'application.
QSurfaceFormat format; format.setDepthBufferSize(24); format.setStencilBufferSize(8); // Enable stereoscopic rendering support format.setStereo(true); QSurfaceFormat::setDefaultFormat(format);
Rendre deux fois
Une fois que QSurfaceFormat::StereoBuffers est activé, paintGL() sera appelée deux fois, une fois pour chaque tampon. Dans paintGL(), vous pouvez appeler currentTargetBuffer() pour demander quel tampon est actuellement actif.
Dans l'extrait suivant, nous translatons légèrement la matrice pour ne pas rendre les vertices les uns sur les autres. Il s'agit d'un exemple simple qui montre que si le support nécessaire est présent, à l'exécution vous devriez voir deux objets, un à gauche et un à 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.