Qt Quick 3D - Beispiel für Ebenen
Veranschaulicht die Verwendung von Ebenen in „ QtQuick3D “.

In diesem Beispiel werden die verschiedenfarbigen Logo-Modelle in unterschiedlichen Ebenen platziert. Über das Einstellungsfenster können Benutzer die Sichtbarkeit der einzelnen Ebenen durch Aktivieren bzw. Deaktivieren der Kontrollkästchen steuern.
Vorbereitung der Szenenebenen
Ebenen
Der Einfachheit halber weisen wir dem Enum-Typ von „ Layer “ einen Alias zu, der die Identifizierung erleichtert.
readonly property int redModels: ContentLayer.Layer1
readonly property int greenModels: ContentLayer.Layer2
readonly property int blueModels: ContentLayer.Layer3Kamera
Da wir die Kameraansicht anhand der Ebenen filtern möchten, müssen wir festlegen, welche Ebenen 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 in den 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 oder deaktiviert werden, wird die Eigenschaft „ cameraFilter “ aktualisiert, um die jeweiligen Ebenen einzuschließen oder auszuschließen. Auf diese Weise rendert die Kamera nur die Objekte, die sich in den durch „ 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 unterschiedlich farbigen 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 zuzuweisen. Das rote Logo-Modell 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
} ]
}
ParticleSystem3D {
visible: particlesCheckbox.checked
running: particlesCheckbox.checked
layers: v3d.redModels
SpriteParticle3D {
id: redParticle
color: "red"
maxAmount: 200
particleScale: 8
fadeInDuration: 500
fadeOutDuration: 500
}
ParticleEmitter3D {
particle: redParticle
position: Qt.vector3d(0, -50, 0)
emitRate: 40
lifeSpan: 2000
velocity: VectorDirection3D {
direction: Qt.vector3d(0, 120, 0)
directionVariation: Qt.vector3d(40, 40, 40)
}
}
}
}
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
} ]
}
ParticleSystem3D {
visible: particlesCheckbox.checked
running: particlesCheckbox.checked
layers: v3d.greenModels
SpriteParticle3D {
id: greenParticle
color: "green"
maxAmount: 200
particleScale: 8
fadeInDuration: 500
fadeOutDuration: 500
}
ParticleEmitter3D {
particle: greenParticle
position: Qt.vector3d(0, -50, 0)
emitRate: 40
lifeSpan: 2000
velocity: VectorDirection3D {
direction: Qt.vector3d(0, 120, 0)
directionVariation: Qt.vector3d(40, 40, 40)
}
}
}
}
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
} ]
}
ParticleSystem3D {
visible: particlesCheckbox.checked
running: particlesCheckbox.checked
layers: v3d.blueModels
SpriteParticle3D {
id: blueParticle
color: "blue"
maxAmount: 200
particleScale: 8
fadeInDuration: 500
fadeOutDuration: 500
}
ParticleEmitter3D {
particle: blueParticle
position: Qt.vector3d(0, -50, 0)
emitRate: 40
lifeSpan: 2000
velocity: VectorDirection3D {
direction: Qt.vector3d(0, 120, 0)
directionVariation: Qt.vector3d(40, 40, 40)
}
}
}
}Nachdem die Ebenen eingerichtet sind, rendert die Kamera nun nur noch die Modelle, die sich in den durch „ cameraFilter “ angegebenen Ebenen befinden. Der Benutzer kann die Sichtbarkeit der einzelnen Ebenen ein- oder ausschalten, indem er die Kontrollkästchen im Einstellungsbereich aktiviert oder deaktiviert.
© 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.