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