En esta página

QOpenGLWidget Ejemplo de Renderizado Estereoscopico

Este ejemplo muestra como crear una aplicación mínima basada en QOpenGLWidget con soporte para renderizado estereoscópico.

Nota: El soporte para renderizado estereoscópico tiene ciertos requerimientos de hardware, tales como, una tarjeta gráfica con soporte estereoscópico, gafas 3D y monitores específicos.

Nota: Este ejemplo renderiza dos imágenes en dos buffers separados. Cuando se ven las imágenes a través de gafas 3D, dan un efecto holográfico 3D.

Captura de pantalla de un símbolo alineado a la izquierda de la pantalla

La imagen de arriba es la que se renderizará en la memoria intermedia izquierda.

Captura de pantalla de un símbolo alineado a la derecha de la pantalla

La imagen de arriba es lo que se renderizará en el buffer derecho.

Establecer la bandera de superficie correcta

Para habilitar el renderizado estereoscópico necesitas establecer la bandera QSurfaceFormat::StereoBuffers globalmente. Hacerlo en el widget no es suficiente debido a cómo se maneja la bandera internamente. Lo más seguro es hacerlo en QSurfaceFormat::SetDefaultFormat antes de iniciar la aplicación.

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

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

QSurfaceFormat::setDefaultFormat(format);

Renderizando dos veces

Después de configurar QSurfaceFormat::StereoBuffers, paintGL() será llamada dos veces, una por cada buffer. En paintGL() puedes llamar a currentTargetBuffer() para consultar qué TargetBuffer está activo en ese momento.

En el siguiente snippet trasladamos ligeramente la matriz para no renderizar los vértices unos encima de otros. Este es un simple ejemplo para ver que si existe el soporte necesario, en tiempo de ejecución deberías ver dos objetos, uno a la izquierda y otro a la derecha.

// 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);

Proyecto de ejemplo @ code.qt.io

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