Qt Quick 3D 图形要求

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

Qt Quick 3D 支持与 Qt 6.0 中 Qt Quick 支持的所有图形 API 和着色语言一起操作。在某些情况下,特别是对于 OpenGL 和 OpenGL ES,Qt Quick 3D 的版本要求可能高于 Qt Quick。

着色器管道基于 Qt 6 的标准方法:将兼容 Vulkan 的 GLSL 着色器代码编译为 SPIR-V,然后将其转换为 GLSL、HLSL 和 MSL 源代码。有关详细信息,请参阅 Qt 着色器工具 模块文档。

Qt Quick 3D 与上述任何图形 API 都不直接工作。相反,它使用与 Qt Quick 相似的 Qt 渲染硬件接口抽象。

选择图形 API

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

环境变量可能的值描述
QSG_RHI_BACKENDvulkan, metal, opengl, d3d11, d3d12请求特定的 RHI 后端。默认情况下,目标图形 API 是根据平台选择的,除非此变量或等效的 C++ API 覆盖它。当前默认值是 Windows 上的 Direct3D 11、macOS 上的 Metal,其他地方是 OpenGL。
QSG_RHI_DEBUG_LAYER1在适用的情况下(Vulkan、Direct3D),如果可用,启用图形 API 实现的调试和/或验证层。
QSG_INFO1类似于 OpenGL 基于的渲染路径,设置此变量可启用初始化 Qt Quick 场景图时打印系统信息。这对于调试非常有用。

希望始终使用单个给定图形 API 运行的应用程序可以通过设置 QSG_RHI_BACKEND 环境变量以及 C++ 进行请求。例如,以下在 main() 早期调用的操作,在构造任何 QQuickWindow 之前,会强制使用 Vulkan(否则会失败)。

QQuickWindow::setGraphicsApi(QSGRendererInterface::Vulkan);

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

OpenGL详细信息

期望优秀的Qt Quick 3D应用程序在其main()函数中调用QQuick3D::idealSurfaceFormat(),并使用返回的QSurfaceFormat作为默认值

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

当使用OpenGL以外的图形API时,调用此函数没有效果,但当API是OpenGL时,它将导致创建最适合Qt Quick 3D需求的OpenGL上下文,具有高度的好处。

OpenGL ES 2.0支持

Qt Quick 3D支持在OpenGL ES 2.0上运行,但功能集将受到显著限制。以下列表包含了一些不可用或无法正常工作的功能:

  • 基于图像的光照、光照探针、天空盒
  • 投射阴影
  • 屏幕空间环境遮挡
  • 多采样
  • 某些后期处理效果
  • 使用不存在于GLSL ES 100中的GLSL功能的自定义材质

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