Auf dieser Seite

Qt 3D: QML-Beispiel für mehrere Ansichtsfenster

Ein QML-Beispiel, das die Darstellung eines Szenengraphen aus mehreren Ansichtsfenstern veranschaulicht.

Abbildung, die ein 3D-Objekt aus verschiedenen Blickwinkeln zeigt

„Multi Viewport“ rendert einen Szenengraphen aus der Perspektive von vier virtuellen Kameras in die vier Quadranten eines Fensters. Dies ist eine gängige Konfiguration für 3D-CAD- oder Modellierungstools und könnte angepasst werden, um beispielsweise die Darstellung eines Rückspiegels in einem Autorennspiel oder die Anzeige einer CCTV-Kamera zu unterstützen.

Weitere Informationen finden Sie unter „Ein FrameGraph mit mehreren Ansichtsfenstern“.

Ausführen des Beispiels

Sie können das Beispiel wie folgt ausführen:

Erstellen mehrerer RenderViews

Mithilfe der in „Framegraph Rules“ definierten Regeln erstellen wir fünf „RenderView“-Objekte aus dem „FrameGraph“:

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 }
    }
}

Die Reihenfolge ist wichtig. Würde der „ClearBuffers“-Knoten an letzter statt an erster Stelle stehen, würde dies zu einem schwarzen Bildschirm führen – aus dem einfachen Grund, dass alles unmittelbar nach dem sorgfältigen Rendern wieder gelöscht würde. Aus einem ähnlichen Grund könnte er nicht als Wurzel des FrameGraphs verwendet werden, da dies zu einem Aufruf führen würde, den gesamten Bildschirm für jedes unserer Ansichtsfenster zu löschen.

Obwohl die Deklarationsreihenfolge des FrameGraphs wichtig ist, ist „ Qt 3D “ in der Lage, jedes „RenderView“-Objekt parallel zu verarbeiten, da jedes „RenderView“-Objekt unabhängig von den anderen ist, was die Erzeugung einer Reihe von „RenderCommands“ betrifft, die übermittelt werden sollen, solange der Zustand des „RenderView“-Objekts gültig ist.

Qt 3D nutzt einen aufgabenbasierten Ansatz zur Parallelisierung, der sich auf natürliche Weise mit der Anzahl der verfügbaren Kerne skaliert. Die RenderCommands für die RenderViews können parallel über viele Kerne hinweg generiert werden, und solange wir darauf achten, die RenderViews in der richtigen Reihenfolge im dedizierten OpenGL-Übermittlungs-Thread zu übermitteln, wird die resultierende Szene korrekt gerendert.

Beispielprojekt auf 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.