Dieses Kapitel behandelt das Thema 3D in Qt, bei dem komplexe Szenen kein Problem mehr darstellen. Hier erfahren Sie, wie die Qt 3D-Architektur es ermöglicht, nicht in Meshes und Koordinaten zu denken, sondern in Verhalten, Licht und Interaktion. Es wird gezeigt, wie professionelle Entwickler visuelle Tiefe erreichen.
Es werden das Entity-Component-System (ECS), drei Arten von Lichtquellen, mehrere Kameratypen und mindestens 5 Schlüssel-Transformationen eingesetzt, die die Wahrnehmung der Szene verändern. Es wird gezeigt, wie Animation in 3D ohne Game-Engines implementiert werden kann – mit Mitteln, die bereits in Qt vorhanden sind.
Dieses Kapitel zu überspringen bedeutet, auf dem Level „statischer Modelle” zu bleiben, während hier das echte räumliche Denken in Qt beginnt.
Das Kapitel enthält Code-Beispiele, die sofort einsatzbereit sind.
Selbstüberprüfung zum Kapitel
Warum wurde das Entity-Component-System (ECS) in Qt 3D aus Game-Engines übernommen?Antwort
Richtige Antwort: Der Hauptvorteil von ECS ist die Flexibilität, das Verhalten von Entities zur Laufzeit zu ändern, indem Komponenten hinzugefügt oder entfernt werden, ohne die Programmausführung zu unterbrechen.
Warum trägt eine Entity (Entity) selbst kein Verhalten und keine Eigenschaften?Antwort
Richtige Antwort: Entities sind Container für Komponenten. Das Verhalten wird durch Kombination von Komponenten (Geometrie, Material, Transformation) hinzugefügt, was Modularität und Flexibilität der Architektur gewährleistet.
Welcher Lichttyp sollte zur Simulation der Sonnenbeleuchtung verwendet werden und warum?Antwort
Richtige Antwort: Gerichtetes Licht (DirectionalLight), da es Strahlen aus unendlicher Entfernung aussendet und alle Objekte der Szene gleich beleuchtet, unabhängig von ihrer Position, was der Natur des Sonnenlichts entspricht.
Warum wird reines Weiß für Tageslichtbeleuchtung nicht empfohlen?Antwort
Richtige Antwort: Für mehr Realismus sollten Farbtöne hinzugefügt werden (z.B. gelblich), da Tageslicht in der realen Welt nicht absolut weiß ist.
Wozu können Kameras in Qt 3D ihre Position ändern und animieren?Antwort
Richtige Antwort: Dies ermöglicht es, Bewegungseffekte innerhalb oder entlang von Objekten (Gebäude, Tunnel) zu erstellen, die Szene aus verschiedenen Blickwinkeln zu zeigen und kinematografische Effekte zu erzeugen.
Wofür werden im OBJ-Format Normalenvektoren (vn) verwendet?Antwort
Richtige Antwort: Normalen stehen senkrecht auf den Oberflächen und sind notwendig für die korrekte Berechnung von Beleuchtung, Schatten und Reflexionen auf 3D-Objekten.
Was ist der Hauptunterschied zwischen PhongMaterial und GoochMaterial in Bezug auf Performance?Antwort
Richtige Antwort: GoochMaterial rendert schneller, da es keine Glättung und Glanzlichter erzeugt und daher hervorragend für Test-Visualisierungen geeignet ist, während PhongMaterial realistischere glänzende Oberflächen erzeugt.
Was passiert, wenn cameraAspectRatioMode nicht auf Scene3D.AutomaticAspectRatio gesetzt wird?Antwort
Richtige Antwort: Bei Größenänderungen des Fensters werden die Szenenobjekte verzerrt, da sich die Darstellungsproportionen nicht automatisch an die neuen Fenstermaße anpassen.
Warum können Standard-3D-Objekte von Qt 3D als „Baumaterial” verwendet werden?Antwort
Richtige Antwort: Aus einfachen Formen (Kugeln, Zylinder, Kegel) können komplexe Objekte durch Transformationen zusammengesetzt werden, wie am Beispiel eines Schneemanns aus fünf Kugeln, zwei Zylindern und einem Kegel gezeigt.
Welches Problem löst die Reihenfolge der Aufrufe rotate() und translate() in der Transformationsmatrix?Antwort
Richtige Antwort: Zuerst rotiert rotate() das Objekt, dann verschiebt translate() es, was einen Effekt der Rotation des Objekts in Entfernung vom Zentrum (Orbitalbewegung) erzeugt.
Wozu dient die Angabe der Werte “input” und “logic” in der aspects-Property des Scene3D-Elements?Antwort
Richtige Antwort: Dies ist notwendig, damit die Szene Benutzereingaben (Tastatur, Maus, Touchpad) empfangen und interpretieren kann, um die Kamera zu steuern und mit der Szene zu interagieren.
Warum reicht für die Darstellung eines 3D-Objekts die Geometrie (Mesh) allein nicht aus?Antwort
Richtige Antwort: Die Geometrie definiert nur die Form des Objekts, aber nicht seine visuelle Darstellung. Zur Darstellung wird ein Material benötigt, das die Oberfläche erzeugt und bestimmt, wie sie Licht reflektiert.
Welchen Vorteil bietet das neue Material PrincipledMaterial in Qt6?Antwort
Richtige Antwort: Es basiert auf physikalisch korrektem Rendering (PBR) und bietet eine realistischere Darstellung mit Parametern für Rauheit, Metallizität und Normalen.
Wie kann man mit dem Element ConeMesh einen Zylinder erstellen?Antwort
Richtige Antwort: Man muss den Properties topRadius und bottomRadius gleiche Werte zuweisen, was den Kegel in einen Zylinder mit gleichen Grundflächen verwandelt.
Warum können für 3D-Animation Elemente verwendet werden, die für 2D-Animation eingesetzt wurden?Antwort
Richtige Antwort: Elemente wie NumberAnimation ändern Objekt-Properties über die Zeit, was universell für jeden Grafiktyp ist – sei es Änderung von Position, Drehwinkel oder Skalierung in 2D oder 3D.
Praktische Aufgaben
Einfaches Level
Interaktive Galerie geometrischer Formen
Erstellen Sie eine 3D-Szene mit drei verschiedenen geometrischen Objekten (Kugel, Würfel, Torus), die auf einer horizontalen Linie angeordnet sind. Jedes Objekt sollte eine einzigartige Materialfarbe haben. Fügen Sie eine Punktlichtquelle hinzu und konfigurieren Sie die Kamerasteuerung zur Inspektion der Szene.
Hinweise: Verwenden Sie SphereMesh, CuboidMesh und TorusMesh. Für die Anordnung der Objekte auf einer Linie wenden Sie Transform mit verschiedenen translation-Werten entlang der X-Achse an. Weisen Sie jedem Objekt ein PhongMaterial mit einzigartiger diffuse-Farbe zu. Vergessen Sie nicht den FirstPersonCameraController zur Kamerasteuerung.
Mittleres Level
Animiertes Sonnensystem
Erstellen Sie ein vereinfachtes Sonnensystem-Modell: eine zentrale „Sonne” (große Kugel mit hellem Material) und zwei „Planeten” (kleinere Kugeln), die auf verschiedenen Umlaufbahnen und mit unterschiedlicher Geschwindigkeit um sie kreisen. Verwenden Sie gerichtetes Licht zur Simulation der Sonnenbeleuchtung. Fügen Sie eine Rotation der Planeten um ihre eigene Achse hinzu.
Hinweise: Für Orbitalbewegung verwenden Sie Transform mit Transformationsmatrix: zuerst rotate() für den Umlaufwinkel, dann translate() für die Entfernung vom Zentrum. Wenden Sie NumberAnimation auf die Property an, die den Winkel steuert. Für Rotation um die Achse erstellen Sie eine separate Animation rotationY. Setzen Sie unterschiedliche duration-Werte für verschiedene Geschwindigkeiten.
Schwieriges Level
3D-Szene mit Mehrfachbeleuchtung und zusammengesetztem Objekt
Erstellen Sie eine komplexe Komposition aus Standard-3D-Objekten (z.B. einen Roboter oder eine architektonische Konstruktion) unter Verwendung von mindestens 6 verschiedenen geometrischen Formen. Implementieren Sie ein Beleuchtungssystem aus drei Quellen verschiedener Typen (Punkt-, gerichtetes und Spotlicht) mit verschiedenen Farben. Fügen Sie Animation für zwei Komponenten der Komposition hinzu sowie eine animierte Bewegung des Spotlights, das eines der bewegten Elemente „verfolgt”.
Hinweise: Gruppieren Sie zusammenhängende Objekte in separate Entities für bessere Handhabung. Verwenden Sie Transformationen zur präzisen Positionierung jedes Teils der Komposition. Für das Spotlight (SpotLight) animieren Sie die Transform-Properties und synchronisieren Sie sie mit der Bewegung des Zielobjekts. Experimentieren Sie mit intensity- und color-Properties der Lichtquellen für dramatischen Effekt. Verwenden Sie verschiedene Materialien (PhongMaterial, GoochMaterial) für Kontrast.
💬 Zur Diskussion einladen!
Haben Sie das Entity-Component-System verstanden? Haben Sie mit verschiedenen Beleuchtungs- und Materialtypen experimentiert?
Teilen Sie Ihre 3D-Kreationen, berichten Sie über Schwierigkeiten bei der Arbeit mit Transformationen oder helfen Sie anderen Lesern, Qt 3D zu meistern! Ihre Erfahrungen beim Erstellen animierter Szenen können für die Community sehr nützlich sein.
Diskutieren Sie: Welche Arten von Projekten planen Sie mit Qt 3D zu erstellen? Haben Sie Fragen zur Rendering-Performance oder Szenenoptimierung?