Qt 3D: Multi Viewport QML Beispiel

Ein QML-Beispiel, das das Rendern eines Scenegraphs aus mehreren Viewports demonstriert.

Multi Viewport rendert einen Scenegraph aus dem Blickwinkel von vier virtuellen Kameras in die vier Quadranten eines Fensters. Dies ist eine übliche Konfiguration für 3D-CAD- oder Modellierungstools oder könnte angepasst werden, um bei der Darstellung eines Rückspiegels in einem Autorennspiel oder einer CCTV-Kameraanzeige zu helfen.

Weitere Informationen finden Sie unter A Multi Viewport FrameGraph.

Ausführen des Beispiels

Zum Ausführen des Beispiels von Qt Creatorzu starten, öffnen Sie den Modus Welcome und wählen Sie das Beispiel unter Examples aus. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.

Mehrere RenderViews erstellen

Anhand der in Framegraph Rules definierten Regeln konstruieren 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. Wenn der ClearBuffers -Knoten der letzte statt der erste wäre, würde dies zu einem schwarzen Bildschirm führen, aus dem einfachen Grund, dass alles gelöscht werden würde, nachdem es so sorgfältig gerendert wurde. Aus einem ähnlichen Grund könnte er nicht als Wurzel des FrameGraphs verwendet werden, da dies zu einem Aufruf zum Löschen des gesamten Bildschirms für jedes unserer Ansichtsfenster führen würde.

Obwohl die Reihenfolge der Deklaration des FrameGraphs wichtig ist, ist Qt 3D in der Lage, jede RenderView parallel zu verarbeiten, da jede RenderView unabhängig von den anderen ist, um eine Reihe von RenderCommands zu erzeugen, die übermittelt werden, während der Zustand der RenderView in Kraft ist.

Qt 3D verwendet einen aufgabenbasierten Ansatz zur Parallelisierung, der natürlich mit der Anzahl der verfügbaren Kerne skaliert. Die RenderCommands für die RenderViews können parallel auf vielen Kernen erzeugt werden, und solange wir darauf achten, die RenderViews in der richtigen Reihenfolge an den dedizierten OpenGL-Submission-Thread zu senden, wird die resultierende Szene korrekt gerendert.

Beispielprojekt @ code.qt.io

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