Auf dieser Seite

Qt Quick 3D - Ebenen Beispiel

Demonstriert die Verwendung von Ebenen in QtQuick3D.

Drei gestapelte Qt-Logo-Ebenen in Rot, Grün und Blau mit Kontrollkästchen zum Umschalten der Ebenen

In diesem Beispiel werden die verschiedenfarbigen Logomodelle in verschiedenen Ebenen platziert. Im Einstellungsfenster können die Benutzer die Sichtbarkeit der einzelnen Ebenen durch Aktivieren der Kontrollkästchen steuern.

Vorbereiten der Szenenebenen

Ebenen

Der Einfachheit halber geben wir dem Layer enums-Typ einen Alias, um ihn leichter identifizieren zu können.

readonly property int redModels: ContentLayer.Layer1
readonly property int greenModels: ContentLayer.Layer2
readonly property int blueModels: ContentLayer.Layer3
Kamera

Da wir die Kameraansicht anhand der Ebenen filtern wollen, müssen wir die Ebenen festlegen, die die Kamera rendern soll. Dazu setzen wir die Eigenschaft layers der Kamera auf eine oder mehrere Ebenen. Die Kamera rendert dann nur die Objekte, die sich auf der angegebenen layers befinden. Standardmäßig rendert die Kamera Knoten aus allen layers.

Um die aktiven Ebenen auswählen zu können, erstellen wir eine Eigenschaft cameraFilter und binden sie an die Eigenschaft layers der Kamera.

property int cameraFilter: ContentLayer.LayerAll

camera: PerspectiveCamera {
    layers: v3d.cameraFilter
    position: Qt.vector3d(0, 400, 500)
    eulerRotation.x: -30
    clipFar: 2000
}

Wenn die Kontrollkästchen im Einstellungsfenster aktiviert werden, wird die Eigenschaft cameraFilter aktualisiert, um die jeweiligen Ebenen ein- oder auszuschließen. Auf diese Weise rendert die Kamera nur die Objekte, die sich in den von cameraFilter angegebenen Ebenen befinden.

CheckBox {
    id: checkBoxRedLayer
    text: qsTr("Red Layer")
    checked: true
    onCheckedChanged: {
        v3d.cameraFilter = checked ? v3d.cameraFilter | v3d.redModels : v3d.cameraFilter & ~v3d.redModels;
    }
}
Modelle

Die drei verschiedenfarbigen Modelle müssen nun den jeweiligen Ebenen zugewiesen werden. Wie bei der Kamera können wir die Eigenschaft layers des Modells verwenden, um es einer Ebene zuzuordnen. Das rote Logomodell wird der Ebene redLayer zugewiesen, das grüne der Ebene greenLayer und das blaue der Ebene blueLayer.

Node {
    position: Qt.vector3d(0, 200, 0)
    Model {
        source: "qtlogo.mesh"
        layers: v3d.redModels
        scale: Qt.vector3d(5000, 5000, 5000)
        materials:[ PrincipledMaterial {
            baseColor: "red"
            roughness: 0.5
        } ]

        NumberAnimation on eulerRotation.y {
            from: 0
            to: 360
            duration: 15000
            loops: Animation.Infinite
        }
    }

    Model {
        position: Qt.vector3d(0, -50, 0)
        source: "#Cylinder"
        materials:[ PrincipledMaterial {
            baseColor: "red"
            roughness: 0.5
        } ]
    }
}

Node {
    position: Qt.vector3d(0, 100, 0)
    Model {
        source: "qtlogo.mesh"
        layers: v3d.greenModels
        scale: Qt.vector3d(5000, 5000, 5000)
        materials:[ PrincipledMaterial {
            baseColor: "green"
            roughness: 0.5
        } ]

        NumberAnimation on eulerRotation.y {
            from: 0
            to: 360
            duration: 20000
            loops: Animation.Infinite
        }
    }
    Model {
        position: Qt.vector3d(0, -50, 0)
        source: "#Cylinder"
        materials:[ PrincipledMaterial {
            baseColor: "green"
            roughness: 0.5
        } ]
    }
}
Node {
    Model {
        source: "qtlogo.mesh"
        layers: v3d.blueModels
        scale: Qt.vector3d(5000, 5000, 5000)
        materials:[ PrincipledMaterial {
            baseColor: "blue"
            roughness: 0.5
        } ]

        NumberAnimation on eulerRotation.y {
            from: 0
            to: 360
            duration: 12500
            loops: Animation.Infinite
        }
    }
    Model {
        position: Qt.vector3d(0, -50, 0)
        source: "#Cylinder"
        materials:[ PrincipledMaterial {
            baseColor: "blue"
            roughness: 0.5
        } ]
    }
}

Wenn die Ebenen eingerichtet sind, rendert die Kamera nur die Modelle, die sich in den von cameraFilter angegebenen Ebenen befinden. Der Benutzer kann die Sichtbarkeit der einzelnen Ebenen durch Aktivieren oder Deaktivieren der Kontrollkästchen im Einstellungsfenster umschalten.

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