QOpenGLWidget 双眼视渲染示例

本示例演示了如何创建一个基于 QOpenGLWidget 的应用程序,该应用程序支持双眼视渲染。

注意:双眼视渲染需要一定的硬件要求,例如,具有双眼视支持功能的显卡、3D 眼镜和特定显示器。

注意:此示例将两个图像渲染到两个单独的缓冲区中。通过 3D 眼镜查看图像时,它们会产生 3D 全息效果。

上方的图像将被渲染到左侧缓冲区。

上方的图像将被渲染到右侧缓冲区。

设置正确的表面标志

要启用双眼视渲染,您需要全局设置标记 QSurfaceFormat::StereoBuffers。仅在对小部件做此操作是不够的,因为标记是在内部如何处理的。最安全的方法是在应用程序启动之前使用 QSurfaceFormat::SetDefaultFormat 来实现。

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

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

QSurfaceFormat::setDefaultFormat(format);

渲染两次

设置 QSurfaceFormat::StereoBuffers 之后,paintGL() 将被调用两次,一次针对每个缓冲区。在 paintGL() 中,您可以调用 currentTargetBuffer() 来查询当前活动的 TargetBuffer。

在以下代码片段中,我们稍微翻译矩阵,以便不把顶点渲染在彼此上面。这是一个简单的示例,只需查看是否存在必要的支持,在运行时应该看到两个对象,一个在左边,一个在右边。

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

示例项目 @ code.qt.io

© 2024 The Qt Company Ltd. 本文档中的文档贡献属于其各自的版权所有者。本提供的文档是根据由自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。