Qt Quick 3D 图形要求

支持的图形 API、版本和着色语言

Qt Quick 3D Qt 6.0 支持 所支持的所有图形 API 和着色语言。在某些情况下,尤其是 OpenGL 和 OpenGL ES,对 的版本要求可能高于 。Qt Quick Qt Quick 3D Qt Quick

着色器流水线基于 Qt 6 的标准方法:兼容 Vulkan 的 GLSL 着色器代码被编译到 SPIR-V,然后被翻译成 GLSL、HLSL 和 MSL 源代码。详情请参阅QtXML Shader Tools 模块文档。

Qt Quick 3D 该模块不直接使用上述任何图形 API。相反,它使用 Qt 渲染硬件接口(Qt Rendering Hardware Interface)抽象,类似于 。Qt Quick

选择图形 API

由于Qt Quick 3D 并不独立初始化渲染或窗口,而是依赖于QQuickWindowQQuickViewWindow QML 类型,因此适用于Qt Quick 场景图的所有与图形 API 选择相关的内容也适用于Qt Quick 3D 。可以通过设置下面列出的特定环境变量来控制场景图的行为:

环境变量可能的值描述
QSG_RHI_BACKENDvulkan,metal,opengl,d3d11d3d12请求特定的 RHI 后端。默认情况下,根据平台选择目标图形 API,除非该变量或等效的 C++ API 改写了该 API。默认情况下,Windows 使用 Direct3D 11,macOS 使用 Metal,其他平台使用 OpenGL。
QSG_RHI_DEBUG_LAYER1在适用情况下(Vulkan、Direct3D),启用图形 API 实现的调试层和/或验证层(如果可用)。
QSG_INFO1与基于 OpenGL 的渲染路径一样,设置此项可在初始化Qt Quick 场景图时打印系统信息。这对排除故障非常有用。

希望始终使用单个给定图形应用程序接口运行的应用程序,可以通过QSG_RHI_BACKEND enivronment 变量以及 C++ 来请求这样做。例如,在构建任何QQuickWindow 之前,main() 的早期调用会强制使用 Vulkan(否则会失败)。

QQuickWindow::setGraphicsApi(QSGRendererInterface::Vulkan);

注: Qt Quick软件适配不支持 3D 内容。

OpenGL 特性

编写良好的Qt Quick 3D 应用程序应在其 main() 函数中调用QQuick3D::idealSurfaceFormat() 并将返回的QSurfaceFormat 作为默认值:

QSurfaceFormat::setDefaultFormat(QQuick3D::idealSurfaceFormat());

在使用 OpenGL 以外的图形应用程序接口时,调用该函数不会产生任何影响,但在使用 OpenGL 应用程序接口时,调用该函数则大有裨益,因为它将创建最适合Qt Quick 3D 需要的 OpenGL 上下文。

支持 OpenGL ES 2.0

Qt Quick 3D OpenGL ES 2.0 支持在 OpenGL ES 2.0 上运行,但功能非常有限。下面列出了一些无法使用或无法正常运行的功能:

  • 基于图像的照明、光探针、天空盒
  • 阴影映射
  • 屏幕空间环境遮蔽
  • 多重采样
  • 某些后期处理效果
  • 使用依赖于 GLSL ES 100 中不存在的 GLSL 功能的着色器的自定义材质
  • 阶独立透明度

注: Qt Quick 3D 需要在 WebAssembly 平台上使用 OpenGL ES 3.0 / WebGL 2。不支持 OpenGL ES 2.0 / WebGL 1。

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