このページでは

Qt 3D:マルチビューポートのQMLサンプル

複数のビューポートからシーングラフをレンダリングするQMLのサンプルです。

さまざまな角度から見た3Dオブジェクトを描いたイラスト

マルチビューポートでは、4台の仮想カメラの視点からシーングラフをレンダリングし、ウィンドウの4つの象限に表示します。これは3D CADやモデリングツールで一般的な構成ですが、カーレースゲームのバックミラーやCCTVカメラの表示をレンダリングするために調整することも可能です。

詳細については、「マルチビューポートのFrameGraph」を参照してください。

例の動作

以下の手順でサンプルを実行できます:

複数のRenderViewの作成

Framegraph Rulesで定義されたルールを使用して、FrameGraphから5つの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 は、利用可能なコア数に応じて自然にスケールアップするタスクベースの並列処理アプローチを採用しています。RenderView に対する RenderCommands は、多数のコアにわたって並列に生成することができ、専用の OpenGL 送信スレッド上で RenderView を正しい順序で送信するように注意さえすれば、結果として得られるシーンは正しくレンダリングされます。

サンプルプロジェクト @ code.qt.io

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