View3D QML Type

Stellt ein Ansichtsfenster zur Verfügung, auf dem eine 3D-Szene gerendert werden kann. Mehr...

Import Statement: import QtQuick3D

Eigenschaften

Methoden

  • vector3d mapFrom3DScene(vector3d scenePos)
  • vector3d mapTo3DScene(vector3d viewPos)
  • pickResult pick(float x, float y)
  • pickResult pick(float x, float y, Model model) (since 6.8)
  • List<pickResult> pickAll(float x, float y) (since 6.2)
  • List<pickResult> pickSubset(float x, float y, list<Model> models) (since 6.8)
  • pickResult rayPick(vector3d origin, vector3d direction) (since 6.2)
  • List<pickResult> rayPickAll(vector3d origin, vector3d direction) (since 6.2)
  • setTouchpoint(Item target, point position, int pointId, bool pressed) (since 6.8)

Detaillierte Beschreibung

View3D bietet eine 2D-Oberfläche, auf der eine 3D-Szene gerendert werden kann. Diese Oberfläche ist eine Qt Quick Item und kann in einer Qt Quick Szene platziert werden.

Es gibt zwei Möglichkeiten, die 3D-Szene zu definieren, die auf dem View3D visualisiert wird: Wenn Sie eine Hierarchie von Node-based Elementen als Kinder des View3D direkt definieren, wird dies die implizite Szene des View3D.

Es ist auch möglich, auf eine bestehende Szene zu verweisen, indem Sie die Eigenschaft importScene verwenden und sie auf die Wurzel Node der Szene setzen, die Sie visualisieren möchten. Diese Node muss kein Vorfahre des View3D sein, und Sie können mehrere View3Ds haben, die die gleiche Szene importieren.

Dies wird im View3D Beispiel demonstriert.

Wenn der View3D sowohl untergeordnete Nodes hat und die Eigenschaft importScene gleichzeitig gesetzt ist, werden beide Szenen so gerendert, als wären sie geschwisterliche Teilbäume in derselben Szene.

Um zu steuern, wie eine Szene gerendert wird, können Sie die Eigenschaft environment festlegen. Der Typ SceneEnvironment verfügt über eine Reihe visueller Eigenschaften, die angepasst werden können, wie z. B. Hintergrundfarbe, Tone Mapping, Anti-Aliasing und mehr. ExtendedSceneEnvironment im Modul QtQuick3D.Helpers erweitert SceneEnvironment um noch mehr Funktionen und fügt allgemeine Nachbearbeitungseffekte hinzu.

Damit etwas in View3D gerendert werden kann, benötigt die Szene außerdem eine Camera. Wenn es nur eine einzige Camera in der Szene gibt, wird diese automatisch ausgewählt. Andernfalls kann die camera Eigenschaft verwendet werden, um die Kamera auszuwählen. Die Camera entscheidet, welche Teile der Szene sichtbar sind und wie sie auf die 2D-Oberfläche projiziert werden.

Standardmäßig wird die 3D-Szene zuerst in einen Puffer außerhalb des Bildschirms gerendert und dann mit dem Rest der Qt Quick -Szene zusammengesetzt, wenn sie fertig ist. Dies bietet ein Höchstmaß an Kompatibilität, kann aber auf manchen Grafikkarten zu Leistungseinbußen führen. Wenn dies der Fall ist, kann die Eigenschaft renderMode verwendet werden, um zu ändern, wie das View3D in das Fenster gerendert wird.

Ein View3D mit der Standardeinstellung Offscreen renderMode ist implizit auch ein texture provider. Das bedeutet, dass ShaderEffect oder Texture.sourceItem direkt auf View3D verweisen können, solange sich alle Elemente innerhalb desselben window befinden. Wie bei jedem anderen Item ist es auch möglich, den View3D oder einen seiner Vorfahren in eine texturbasierte item layer zu verwandeln.

Siehe auch Qt Quick 3D - View3D Beispiel.

Eigenschaft Dokumentation

Diese Eigenschaft gibt an, welche Camera zum Rendern der Szene verwendet wird. Wenn diese Eigenschaft nicht gesetzt ist, wird die erste aktivierte Kamera in der Szene verwendet.

Hinweis: Wenn diese Eigenschaft eine Kamera enthält, die nicht visible ist, werden keine weiteren Versuche unternommen, eine Kamera zu finden.

Siehe auch PerspectiveCamera, OrthographicCamera, FrustumCamera, und CustomCamera.


effectiveTextureSize : size [since 6.7]

Diese Eigenschaft gibt die Größe der zugrunde liegenden Farb- (und Tiefen-/Schablonen-) Puffer in Pixeln an. Sie wird für die Verwendung im GUI-(Haupt-)Thread, in QML-Bindungen oder JavaScript bereitgestellt.

Diese Eigenschaft ist schreibgeschützt.

Hinweis: Diese Eigenschaft ist nur relevant, wenn renderMode auf Offscreen gesetzt ist.

Diese Eigenschaft wurde in Qt 6.7 eingeführt.

Siehe auch explicitTextureWidth, explicitTextureHeight, und DebugView.


Diese Eigenschaft gibt die SceneEnvironment an, die zum Rendern der Szene verwendet wird.

Hinweis: Wenn Sie diese Eigenschaft auf null setzen, wird SceneEnvironment auf den Standardwert zurückgesetzt.

Siehe auch SceneEnvironment.


explicitTextureHeight : int [since 6.7]

Die Höhe der dem Element zugeordneten Textur in Pixeln. Relevant, wenn eine feste Texturgröße gewünscht wird, die nicht von der Größe des Objekts abhängt. Diese Größe hat keine Auswirkung auf die Geometrie des Gegenstands (seine Größe und Platzierung in der Szene), was bedeutet, dass der Inhalt der Textur auf die Fläche des Gegenstands skaliert oder verkleinert (und möglicherweise gestreckt) erscheint.

Standardmäßig ist der Wert 0. Ein Wert von 0 bedeutet, dass die Größe der Textur der Größe des Objekts folgt. (texture size in pixels = item's logical size * device pixel ratio).

Hinweis: Diese Eigenschaft ist nur relevant, wenn renderMode auf Offscreen gesetzt ist. Ansonsten wird ihr Wert ignoriert.

Diese Eigenschaft wurde in Qt 6.7 eingeführt.

Siehe auch explicitTextureWidth, effectiveTextureSize, und DebugView.


explicitTextureWidth : int [since 6.7]

Die Breite der dem Element zugeordneten Textur in Pixeln. Relevant, wenn eine feste Texturgröße gewünscht wird, die nicht von der Größe des Objekts abhängt. Diese Größe hat keine Auswirkung auf die Geometrie des Gegenstands (seine Größe und Platzierung in der Szene), was bedeutet, dass der Inhalt der Textur auf der Fläche des Gegenstands nach oben oder unten skaliert (und möglicherweise gestreckt) erscheint.

Standardmäßig ist der Wert 0. Ein Wert von 0 bedeutet, dass die Größe der Textur der Größe des Objekts folgt. (texture size in pixels = item's logical size * device pixel ratio).

Hinweis: Diese Eigenschaft ist nur relevant, wenn renderMode auf Offscreen gesetzt ist. Ansonsten wird ihr Wert ignoriert.

Diese Eigenschaft wurde in Qt 6.7 eingeführt.

Siehe auch explicitTextureHeight, effectiveTextureSize, und DebugView.


extensions : List<QtQuick3D::Object3D>

Diese Eigenschaft enthält eine Liste von Benutzererweiterungen, die mit dieser View3D verwendet werden sollten.

Siehe auch RenderExtension.


importScene : QtQuick3D::Node

Diese Eigenschaft definiert den Referenzknoten der zu rendernden Szene im Ansichtsfenster. Der Knoten muss kein Kindknoten des View3D sein. Dieser referenzierte Knoten wird zu einem Geschwisterknoten mit Kindknoten von View3D, falls es welche gibt.

Hinweis: Diese Eigenschaft kann nur einmal festgelegt werden, und spätere Änderungen haben keine Auswirkungen.

Sie können auch eine Hierarchie von Node-based Elementen als Kinder von View3D direkt definieren, dann wird dies die implizite Szene von View3D.

Um die aktuelle Szene des View3D zurückzugeben, verwenden Sie die Eigenschaft scene.

Siehe auch Node.


renderFormat : enumeration [since 6.4]

Diese Eigenschaft bestimmt das Format der Backing-Textur. Sie ist nur anwendbar, wenn View3D auf eine Textur gerendert wird, zum Beispiel weil renderMode View3D.Offscreen ist.

Die Vorgabe ist ShaderEffectSource.RGBA8.

Wenn das Format vom zugrunde liegenden Grafiktreiber zur Laufzeit nicht unterstützt wird, wird RGBA8 verwendet.

Diese Eigenschaft wurde in Qt 6.4 eingeführt.

Siehe auch QtQuick::ShaderEffectSource::format und QtQuick::Item::layer.format.


renderMode : enumeration

Diese Eigenschaft bestimmt, wie die View3D mit den anderen Teilen der Qt Quick Szene kombiniert wird.

Standardmäßig wird die Szene als Zwischenschritt in einen Off-Screen-Puffer gerendert. Dieser Off-Screen-Puffer wird dann wie jedes andere Qt Quick Item in das Fenster (oder Rendering-Ziel) gerendert.

Für die meisten Benutzer wird es nicht nötig sein, den Rendermodus zu ändern, und diese Eigenschaft kann getrost ignoriert werden. Auf mancher Grafikhardware kann die Verwendung eines Offscreen-Puffers jedoch einen Leistungsengpass darstellen. Wenn dies der Fall ist, lohnt es sich, mit anderen Modi zu experimentieren.

KonstanteBeschreibung
View3D.OffscreenDie Szene wird als Zwischenschritt in einen Offscreen-Puffer gerendert. Dieser Offscreen-Puffer wird dann mit dem Rest der Szene auf Qt Quick zusammengesetzt.
View3D.UnderlayDie Szene wird direkt in das Fenster gerendert, bevor der Rest der Qt Quick -Szene gerendert wird. In diesem Modus kann die View3D nicht über andere Qt Quick Elemente gelegt werden.
View3D.OverlayDie Szene wird direkt in das Fenster gerendert, nachdem Qt Quick gerendert wurde. In diesem Modus befindet sich die View3D immer über anderen Qt Quick Elementen.
View3D.InlineDer Szenengraph von View3D wird in den Hauptszenengraph eingebettet, und es gilt dieselbe Ordnungssemantik wie für alle anderen Qt Quick Item . Da dieser Modus je nach dem Inhalt der Szene zu subtilen Problemen führen kann, weil tiefenbasierte 3D-Inhalte in einen 2D-Szenengraph eingefügt werden, wird seine Verwendung nicht empfohlen, es sei denn, es besteht ein besonderer Bedarf.

Die Voreinstellung ist View3D.Offscreen.

Hinweis: Beim Ändern des Rendermodus ist es wichtig zu beachten, dass View3D.Offscreen (die Voreinstellung) der einzige Modus ist, der perfekte Grafiktreue garantiert. Die anderen Modi haben alle Einschränkungen, die zu visuellen Störungen führen können. Daher ist es wichtig zu überprüfen, ob die visuelle Ausgabe immer noch korrekt aussieht, wenn Sie diese Eigenschaft ändern.

Hinweis: Bei Verwendung der Modi "Underlay", "Overlay" oder "Inline" kann es sinnvoll und in einigen Fällen sogar erforderlich sein, das Schreiben des Tiefenpuffers des Qt Quick -Szenengraphs über QQuickGraphicsConfiguration::setDepthBufferFor2D() zu deaktivieren, bevor das QQuickWindow - oder QQuickView -Element angezeigt wird, das das View3D -Element enthält.


renderStats : QtQuick3D::RenderStats [read-only]

Diese Eigenschaft liefert Statistiken über das Rendering eines Frames, wie fps, frameTime, renderTime, syncTime und maxFrameTime.


scene : QtQuick3D::Node [read-only]

Gibt die Wurzel Node der Szene von View3D zurück.

So definieren Sie die 3D-Szene, die in der View3D visualisiert wird:

  • Definieren Sie eine Hierarchie von Node-based Elementen als Kinder der View3D direkt, dann wird dies die implizite Szene der View3D.
  • Verweisen Sie auf eine bestehende Szene, indem Sie die Eigenschaft importScene verwenden und sie auf die Wurzel Node der Szene setzen, die Sie visualisieren möchten. Diese Node muss kein Vorfahre der View3D sein, und Sie können mehrere View3Ds haben, die die gleiche Szene importieren.

Siehe auch importScene.


Dokumentation der Methode

vector3d mapFrom3DScene(vector3d scenePos)

Transformiert scenePos vom Szenenraum (3D) in den Ansichtsraum (2D).

Die zurückgegebenen x- und y-Werte werden in Ansichtskoordinaten angegeben, wobei die linke obere Ecke bei [0, 0] und die rechte untere Ecke bei [Breite, Höhe] liegt. Der zurückgegebene z-Wert enthält den Abstand von der nahen Clipebene des Kegelstumpfes (clipNear) zu scenePos in Szenekoordinaten. Wenn der Abstand negativ ist, bedeutet das, dass scenePos hinter der aktiven Kamera liegt. Wenn scenePos nicht auf eine Position in der Szene abgebildet werden kann, wird eine Position von [0, 0, 0] zurückgegeben.

Diese Funktion setzt voraus, dass camera der Ansicht zugewiesen ist.

Siehe auch mapTo3DScene() und Camera.mapToViewport().


vector3d mapTo3DScene(vector3d viewPos)

Transformiert viewPos vom Ansichtsraum (2D) in den Szenenraum (3D).

Die x- und y-Werte von viewPos sollten in Ansichtskoordinaten angegeben werden, wobei die obere linke Ecke bei [0, 0] und die untere rechte Ecke bei [Breite, Höhe] liegt. Der z-Wert wird als Abstand von der nahen Clipebene des Kegelstumpfes (clipNear) in Szenekoordinaten interpretiert.

Wenn viewPos nicht erfolgreich auf eine Position in der Szene abgebildet werden kann, wird eine Position von [0, 0, 0] zurückgegeben.

Diese Funktion setzt voraus, dass der Ansicht eine camera zugewiesen ist.

Siehe auch mapFrom3DScene() und Camera.mapFromViewport().


pickResult pick(float x, float y)

Diese Methode "schießt" einen Strahl von den Ansichtskoordinaten x und y in die Szene und gibt Informationen über den nächstgelegenen Schnittpunkt mit einem Objekt in der Szene zurück.

Sie kann z.B. mit Mauskoordinaten aufgerufen werden, um das Objekt unter dem Mauszeiger zu finden.


[since 6.8] pickResult pick(float x, float y, Model model)

Diese Methode "schießt" einen Strahl von den Ansichtskoordinaten x und y in die Szene und gibt Informationen über den Schnittpunkt zwischen dem Strahl und dem angegebenen model zurück.

Dies kann z.B. mit Mauskoordinaten aufgerufen werden, um das Objekt unter dem Mauszeiger zu finden.

Diese Methode wurde in Qt 6.8 eingeführt.


[since 6.2] List<pickResult> pickAll(float x, float y)

Diese Methode "schießt" einen Strahl in die Szene von den Ansichtskoordinaten x und y und gibt eine Liste von Informationen über Schnittpunkte mit Objekten in der Szene zurück. Die zurückgegebene Liste ist nach der Entfernung von der Kamera sortiert, wobei die nächstgelegenen Schnittpunkte zuerst und die am weitesten entfernten zuletzt angezeigt werden.

Dies kann z.B. mit Mauskoordinaten aufgerufen werden, um das Objekt unter dem Mauszeiger zu finden.

Diese Methode wurde in Qt 6.2 eingeführt.


[since 6.8] List<pickResult> pickSubset(float x, float y, list<Model> models)

Diese Methode "schießt" einen Strahl von den Ansichtskoordinaten x und y in die Szene und gibt Informationen über die Schnittpunkte mit der übergebenen Liste von models zurück. Dabei wird nur die Liste der übergebenen Modelle überprüft. Die zurückgegebene Liste ist nach der Entfernung von der Kamera sortiert, wobei die nächstgelegenen Schnittpunkte zuerst und die am weitesten entfernten zuletzt angezeigt werden.

Diese Funktion kann z.B. mit Mauskoordinaten aufgerufen werden, um das Objekt unter dem Mauszeiger zu finden.

Funktioniert sowohl mit Property List<Model> als auch mit dynamischen JavaScript Arrays von Models.

Diese Methode wurde in Qt 6.8 eingeführt.


[since 6.2] pickResult rayPick(vector3d origin, vector3d direction)

Diese Methode "schießt" einen Strahl in die Szene, beginnend bei origin und direction und gibt Informationen über den nächstgelegenen Schnittpunkt mit einem Objekt in der Szene zurück.

Sie kann zum Beispiel mit der Position und dem Vorwärtsvektor eines beliebigen Objekts in der Szene aufgerufen werden, um zu sehen, welches Objekt sich vor einem Objekt befindet. Damit ist es möglich, von jedem Punkt der Szene aus zu picken.

Diese Methode wurde in Qt 6.2 eingeführt.


[since 6.2] List<pickResult> rayPickAll(vector3d origin, vector3d direction)

Diese Methode "schießt" einen Strahl in die Szene, beginnend bei origin und direction, und gibt eine Liste mit Informationen über die nächstgelegenen Schnittpunkte mit Objekten in der Szene zurück. Die Liste ist nach der Entfernung vom Ursprung entlang des Richtungsvektors vorsortiert, wobei die nächstgelegenen Schnittpunkte zuerst und die am weitesten entfernten zuletzt angezeigt werden.

Dies kann zum Beispiel mit der Position und dem Vorwärtsvektor eines beliebigen Objekts in einer Szene aufgerufen werden, um zu sehen, welche Objekte sich vor einem Objekt befinden. Damit ist es möglich, von jedem Punkt der Szene aus zu picken.

Diese Methode wurde in Qt 6.2 eingeführt.


[since 6.8] setTouchpoint(Item target, point position, int pointId, bool pressed)

Sendet ein synthetisches Berührungsereignis an target und verschiebt den Berührungspunkt mit der ID pointId nach position, wobei pressed bestimmt, ob der Punkt gedrückt wird. Sendet auch das entsprechende Berührungsfreigabeereignis, wenn pointId zuvor auf einem anderen Element aktiv war.

Diese Methode wurde in Qt 6.8 eingeführt.


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