Qt 3D:多视口QML示例

一个QML示例,用于从多个视口渲染场景图。

多视口从四个虚拟相机的视角渲染场景图到窗口的四个象限。这是3D CAD或建模工具的常见配置,也可以进行调整以帮助渲染赛车游戏的内侧后视镜或在闭路电视摄像机显示中。

有关更多信息,请参阅多视口FrameGraph

运行示例

要从Qt Creator运行此示例,请打开欢迎模式并从示例中选择示例。有关更多信息,请访问构建和运行示例

创建多个RenderViews

使用在Framegraph规则中定义的规则,我们从FrameGraph中构建了五个RenderView对象

Viewport {
    id: mainViewport
    normalizedRect: Qt.rect(0, 0, 1, 1)

    ClearBuffers {
        buffers: ClearBuffers.ColorDepthBuffer
        clearColor: Qt.rgba(0.6, 0.6, 0.6, 1.0)
    }

    Viewport {
        id: topLeftViewport
        normalizedRect: Qt.rect(0, 0, 0.5, 0.5)
        CameraSelector { id: cameraSelectorTopLeftViewport }
    }

    Viewport {
        id: topRightViewport
        normalizedRect: Qt.rect(0.5, 0, 0.5, 0.5)
        CameraSelector { id: cameraSelectorTopRightViewport }
    }

    Viewport {
        id: bottomLeftViewport
        normalizedRect: Qt.rect(0, 0.5, 0.5, 0.5)
        CameraSelector { id: cameraSelectorBottomLeftViewport }
    }

    Viewport {
        id: bottomRightViewport
        normalizedRect: Qt.rect(0.5, 0.5, 0.5, 0.5)
        CameraSelector { id: cameraSelectorBottomRightViewport }
    }
}

顺序非常重要。如果ClearBuffers节点不是第一而是最后,那么这会导致屏幕变黑,仅仅是因为所有内容都在精心渲染后被清除。出于类似原因,它不能作为FrameGraph的根节点,因为它会为每个视口调用清除整个屏幕。

尽管FrameGraph的声明顺序很重要,但Qt 3D能够在每个RenderView独立于其他对象时并行处理每个RenderView,目的是生成一组要提交的RenderCommands,同时RenderView的状态有效。

Qt 3D使用基于任务的并行方法,这种方法会自然地随着可用的核心数量而扩展。可以在多个核心上并行生成RenderViews的RenderCommands,只要我们注意在专用的OpenGL提交线程上按正确的顺序提交RenderViews,就可以正确渲染生成的场景。

示例项目 @ code.qt.io

© 2024 Qt公司。此处包含的文档贡献的版权属于各自的拥有者。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3许可的。Qt及其相关标志是芬兰的Qt公司及其在世界其他地区的商标。所有其他商标均为各自所有者的财产。