XrView QML Type
Richtet die Ansicht für eine XR-Anwendung ein. Mehr...
| Import Statement: | import QtQuick3D.Xr |
| Since: | Qt 6.8 |
| Inherits: | |
| Status: | Technology preview |
Dieser Typ befindet sich in der Technologievorschau und kann sich noch ändern.
Eigenschaften
- depthSubmissionEnabled : bool
- environment : SceneEnvironment
- fixedFoveation : enumeration
- isQuitOnSessionEndEnabled : bool
- multiViewRenderingEnabled : bool
- multiViewRenderingSupported : bool
- passthroughEnabled : bool
- passthroughSupported : bool
- referenceSpace : enumeration
- renderStats : RenderStats
- runtimeInfo : QQuick3DXrRuntimeInfo
- xrOrigin : XrOrigin
Signale
- initializeFailed(const QString &errorString)
- sessionEnded()
Methoden
- pickResult closestPointPick(vector3d origin, float radius, Model model)
(since 6.11) - vector3d processTouch(vector3d position, int pointId)
- pickResult rayPick(vector3d origin, vector3d direction)
- pickResult rayPick(vector3d origin, vector3d direction, Model model)
(since 6.11) - List<pickResult> rayPickAll(vector3d origin, vector3d direction)
- void setTouchpoint(Item target, point position, int pointId, bool pressed)
- object touchpointState(int pointId)
Ausführliche Beschreibung
Ein XrView richtet die Ansicht für eine XR-Anwendung ein. Der folgende Codeausschnitt stammt aus dem „Xr Simple Example“ unterQt Quick 3D und veranschaulicht die Verwendung dieses Typs.
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Layouts
//! [XrView]
import QtQuick3D
import QtQuick3D.Xr
XrView {
id: xrView
XrErrorDialog { id: err }
onInitializeFailed: (errorString) => err.run("XRView", errorString)
referenceSpace: XrView.ReferenceSpaceLocalFloor
//! [XrView]
environment: SceneEnvironment {
clearColor: "black"
backgroundMode: SceneEnvironment.Color
}Hinweise zur Plattform
Meta Quest-Geräte
Um „ enable passthrough “ zu nutzen, müssen Sie die folgende Berechtigung in die Datei „ AndroidManifest.xml “ Ihrer App einfügen:
<uses-feature android:name="com.oculus.feature.PASSTHROUGH" android:required="false"/>Dokumentation zu den Eigenschaften
depthSubmissionEnabled : bool [default: false]
Legt fest, ob die Übergabe des Tiefenpuffers an den XR-Compositor aktiviert ist.
Standardmäßig wird der von der 3D-Szene im „ XrView “ verwendete Tiefenpuffer dem XR-Compositor nicht zur Verfügung gestellt. Auf einigen Plattformen erfolgt die Übermittlung der Tiefeninformationen jedoch implizit und kann von der Anwendung weder deaktiviert noch gesteuert werden. Ein Beispiel hierfür ist VisionOS. Eine Änderung dieser Eigenschaft hat auf diesen Plattformen keine Auswirkungen. Andernorts, insbesondere bei OpenXR, hängt die Unterstützung von der zur Laufzeit verwendeten OpenXR-Implementierung ab.
Es ist immer unbedenklich, `depthSubmissionEnabled` auf „ true “ zu setzen. Es hat lediglich keine Auswirkung, wenn dies vom zugrunde liegenden Stack nicht unterstützt wird. Zur Sicherheit können Sie die Debug-Ausgabe überprüfen, um festzustellen, ob die Tiefenübermittlung verwendet wird. Die Übermittlung des Tiefenpuffers kann die vom XR-Compositor durchgeführten Reprojektionen verbessern. Eine Neuprojektion könnte beispielsweise stattfinden, wenn das System die Zielbildrate nicht aufrechterhalten kann und daher auf die Vorhersage von Bildinhalten zurückgreifen muss, um die Wahrnehmung der Szene durch den Benutzer zu verbessern und zu stabilisieren sowie mögliche Bewegungsübelkeit zu reduzieren. Die Anwendung und Qt haben jedoch keinen Einfluss auf die Datennutzung. Es kann auch vorkommen, dass die Übermittlung von Tiefendaten keine praktischen Auswirkungen hat und von der zugrunde liegenden XR-Laufzeitumgebung und dem Compositor ignoriert wird.
In der Praxis bedeutet die Übermittlung des Tiefenpuffers, dass das Rendering in eine von der XR-Laufzeitumgebung bereitgestellte Tiefentextur erfolgt, anstatt in die von Qt erstellte und verwaltete Zwischentextur bzw. den Renderpuffer. Das Rendering in eine Tiefentextur hat bestimmte Auswirkungen auf niedrigerer Ebene, die sich auf die Leistung auswirken können:
Bei Verwendung von „ multisample antialiasing “ (MSAA) bedeutet die Aktivierung der Tiefenübermittlung, dass in eine Multisample-Tiefentextur gerendert und die Samples in die von der XR-Laufzeitumgebung bereitgestellte Nicht-Multisample-Tiefentextur aufgelöst werden. Ohne Tiefenübermittlung wäre dieser Auflösungsschritt nicht erforderlich. Zudem unterstützen einige 3D-APIs das Auflösen von Multisample-Tiefen-Stencil-Daten nicht (siehe das Flag „ QRhi::ResolveDepthStencil “ für Details). Ohne diese Unterstützung werden Versuche, die Tiefenübermittlung in Kombination mit MSAA zu aktivieren, ordnungsgemäß ignoriert.
Selbst wenn MSAA nicht verwendet wird, löst die Aktivierung der Tiefenübermittlung das Ausgeben von Tiefendaten bei 3D-APIs aus, die dies steuern können. Der Speichervorgang für Tiefen-/Stencil-Daten wird von Qt in der Regel als unnötig gekennzeichnet, was sich bei gekachelten GPU-Architekturen positiv auf die Leistung auswirken kann. Bei der Tiefenübermittlung geschieht dies nicht, da Tiefendaten aus Sicht von Qt immer geschrieben werden müssen.
Hinweis: Wir empfehlen Entwicklern, ihre Anwendungen mit aktivierter Tiefenübermittlung zu testen, die Vor- und Nachteile abzuwägen und auf der Grundlage ihrer Tests eine bewusste Entscheidung darüber zu treffen, ob sie diese Funktion aktivieren möchten oder nicht.
environment : SceneEnvironment
Enthält
Enthält die „ SceneEnvironment “ für die XR-Ansicht.
fixedFoveation : enumeration [default: XrView.HighFoveation]
Steuert den Grad des festen foveierten Renderings für das „ XrView “.
Foveated Rendering reduziert die GPU-Auslastung, indem die Bildqualität (Auflösung) in Bereichen verringert wird, in denen der Unterschied für das Auge weniger wahrnehmbar ist. Beim festen fovealen Rendering sind die Bereiche mit reduzierter Bildqualität fest vorgegeben und ändern sich nicht. Auf einigen Plattformen gibt es kein Konzept für festes foveales Rendering und keine Steuerungsmöglichkeit dafür. Beispielsweise führen VisionOS-basierte Geräte eine dynamische, augengesteuerte Foveation durch; daher wird der Wert dieser Eigenschaft in der Praxis ignoriert. Andere Geräte, wie beispielsweise das Meta Quest 3, unterstützen nur festgelegte Foveation, wodurch diese Eigenschaft relevant wird.
Der Wert kann einer der folgenden sein:
| Constant | Beschreibung |
|---|---|
XrView.NoFoveation | 0, keine Foveation. |
XrView.LowFoveation | 1, geringe Foveation. |
XrView.MediumFoveation | 2, mittlere Foveation. |
XrView.HighFoveation | 3, hohe Foveation. |
Sofern unterstützt, lautet der Standardwert „ HighFoveation “. Daher sollte es in der Praxis selten notwendig sein, diesen Wert in Anwendungen zu ändern.
isQuitOnSessionEndEnabled : bool
Gibt an, ob die Anwendung beendet werden soll, wenn die XR-Sitzung endet.
multiViewRenderingEnabled : bool [default: true]
Dies ist eine schreibgeschützte Eigenschaft, die angibt, ob das Multiview-Rendering für die XR-Ansicht aktiviert ist.
Diese Eigenschaft gibt Auskunft darüber, ob das Multiview-Rendering zur Laufzeit tatsächlich verwendet wird. Wenn es nicht unterstützt wird, wechselt der Wert zurück zu „ false “.
Die Aktivierung des Multiview-Renderings wird empfohlen. Es kann die Leistung verbessern und den CPU- sowie GPU-Leistungsverbrauch senken. Standardmäßig ist es deaktiviert, um maximale Kompatibilität zu gewährleisten. Entwicklern wird empfohlen, zu überprüfen, ob ihre Anwendung wie erwartet rendert, wenn „multiViewRenderingEnabled“ auf „ true “ gesetzt ist, und die Einstellung anschließend beizubehalten.
Hinweis: Bei bestimmten „ Qt Quick “- und „Quick 3D“-Funktionen, die Shader-Code beinhalten, der von der Anwendung bereitgestellt wird, muss dieser Code möglicherweise angepasst werden, um mit dem Multiview-Rendering kompatibel zu sein. Beispiele hierfür sind benutzerdefinierte 2D- und 3D-Materialien sowie Nachbearbeitungseffekte. Die Dokumentation zum Multiview-Rendering enthält weitere Informationen hierzu sowie dazu, wie das Multiview-Rendering deaktiviert werden kann.
Siehe auch „ multiViewRenderingSupported “ und „Multiview-Rendering“.
multiViewRenderingSupported : bool
Diese schreibgeschützte Eigenschaft gibt Auskunft über die Verfügbarkeit des Multiview-Renderings.
Siehe auch multiViewRenderingEnabled.
passthroughEnabled : bool
Enthält
Gibt an, ob Passthrough für die XR-Ansicht aktiviert ist.
passthroughSupported : bool
Gibt an
Gibt an, ob Passthrough für die XR-Ansicht unterstützt wird.
referenceSpace : enumeration [default: XrView.ReferenceSpaceLocal]
Ruft den Referenzraum für die XR-Ansicht ab oder legt ihn fest.
Mögliche Werte:
| Konstante | Beschreibung |
|---|---|
XrView.ReferenceSpaceUnknown | |
XrView.ReferenceSpaceLocal | Der Ursprung befindet sich an der Standardansichtsposition (in der Regel durch einen „Ansicht zurücksetzen“-Vorgang definiert). |
XrView.ReferenceSpaceStage | Der Ursprung befindet sich auf Bodenhöhe in der Mitte des vom Benutzer definierten Bereichs. |
XrView.ReferenceSpaceLocalFloor | Der Ursprung befindet sich auf Bodenhöhe unterhalb der Standardansichtsposition. |
ReferenceSpaceLocal Dies ist vor allem bei Anwendungen im Sitzen nützlich, bei denen der Inhalt nicht relativ zum Boden positioniert ist, zum Beispiel bei schwebenden Menüs. Der Inhalt verschiebt sich, wenn der Benutzer die Ansicht zurücksetzt.
ReferenceSpaceStage ist vor allem für Anwendungen im Raummaßstab nützlich, bei denen sich der Benutzer frei innerhalb des Spielbereichs bewegt. Der Inhalt bewegt sich nicht, wenn der Benutzer die Ansicht zurücksetzt.
ReferenceSpaceLocalFloor ist vor allem für stationäre Anwendungen (sitzend oder stehend) nützlich, bei denen der Inhalt relativ zum Boden positioniert ist. Der Inhalt verschiebt sich, wenn der Benutzer die Ansicht zurücksetzt.
Hinweis: Unter visionOS ist der Referenzraum immer „ ReferenceSpaceLocalFloor “ und kann nicht geändert werden. Das bedeutet, dass Anwendungen, die mit „ ReferenceSpaceLocal “ entwickelt wurden, unter visionOS ihren Ursprung auf Bodenhöhe haben, was dazu führen kann, dass Inhalte an einer unerwarteten Position erscheinen. Um dies zu handhaben, können Anwendungen die Eigenschaft „referenceSpace“ zur Laufzeit überprüfen und die vertikale Position ihrer Inhalte entsprechend anpassen. Zum Beispiel:
y: xrView.referenceSpace === XrView.ReferenceSpaceLocalFloor ? 130 : 0renderStats : RenderStats
Enthält
Enthält Darstellungsstatistiken für die XR-Ansicht.
runtimeInfo : QQuick3DXrRuntimeInfo
Bietet
Enthält Informationen zur XR-Laufzeitumgebung für die XR-Ansicht.
xrOrigin : XrOrigin
Enthält den aktiven XR-Ursprung.
Der XR-Ursprung ist der Punkt in der Szene, der als Ursprung des XR-Koordinatensystems gilt. Der XR-Ursprung wird verwendet, um verfolgte Objekte wie die Kamera und Controller in der Szene zu positionieren. Eine Anwendung kann mehrere XrOrigins haben, aber jeweils nur einer kann aktiv sein.
Hinweis: Diese Eigenschaft muss festgelegt sein, damit die Szene in XR gerendert werden kann.
Siehe auch „ XrOrigin “.
Signal-Dokumentation
initializeFailed(const QString &errorString)
Wird ausgelöst, wenn die Initialisierung fehlschlägt und ein neues „ errorString “ vorliegt, das den Fehler beschreibt.
Hinweis: Der entsprechende Handler lautet „ onInitializeFailed “.
sessionEnded()
Wird ausgelöst, wenn die Sitzung endet.
Hinweis: Der zugehörige Handler lautet „ onSessionEnded “.
Methodendokumentation
[since 6.11] pickResult closestPointPick(vector3d origin, float radius, Model model)
Diese Methode ermittelt den Punkt auf der Oberfläche von model, der origin am nächsten liegt, und zwar innerhalb einer Entfernung von radius. Wenn model gleich null ist, wird das nächstgelegene Objekt innerhalb von radius ermittelt.
Existiert kein solches Objekt, wird „ null “ zurückgegeben.
Diese Methode wurde in Qt 6.11 eingeführt.
vector3d processTouch(vector3d position, int pointId)
Diese Methode sucht nach einem „ XrItem “ oder einem Modell mit einem „ sourceItem texture “ in der Nähe von „ position “ und sendet ein virtuelles Berührungsereignis mit der Berührungspunkt-ID „ pointId “, sofern „ position “ einem Punkt auf der Oberfläche zugeordnet ist.
Der Rückgabewert ist der Versatz zwischen position und dem berührten Punkt auf der Oberfläche. Dies kann verwendet werden, um zu verhindern, dass ein Handmodell durch ein „ XrItem “ hindurchgeht.
Siehe auch XrHandModel.
pickResult rayPick(vector3d origin, vector3d direction)
Diese Methode sendet einen Strahl in die Szene, der bei den Koordinaten ` origin ` und in Richtung ` direction ` beginnt, und gibt Informationen über den nächstgelegenen Schnittpunkt mit einem Objekt in der Szene zurück.
Übergeben Sie beispielsweise die Position und den Vorwärtsvektor eines beliebigen Objekts in einer Szene, um zu ermitteln, welches Objekt sich vor einem bestimmten Element befindet. Auf diese Weise ist es möglich, von jedem Punkt in der Szene aus eine Auswahl vorzunehmen.
[since 6.11] pickResult rayPick(vector3d origin, vector3d direction, Model model)
Diese Methode „schießt“ einen Strahl in die Szene, der bei origin und in direction beginnt, und gibt Informationen über den Schnittpunkt zwischen dem Strahl und dem angegebenen model zurück.
Diese Methode wurde in Qt 6.11 eingeführt.
List<pickResult> rayPickAll(vector3d origin, vector3d direction)
Diese Methode sendet einen Strahl in die Szene, der bei der Position „ origin “ und im Richtungsvektor „ direction “ beginnt, und gibt eine Liste mit Informationen zu den nächstgelegenen Schnittpunkten mit Objekten in der Szene zurück. Die Liste ist nach der Entfernung vom Ursprung entlang des Richtungsvektors vorsortiert, wobei die nächstgelegenen Schnittpunkte an erster Stelle und die am weitesten entfernten an letzter Stelle stehen.
Diese Methode kann beispielsweise mit der Position und dem Vorwärtsvektor eines beliebigen Objekts in einer Szene aufgerufen werden, um zu ermitteln, welche Objekte sich vor einem bestimmten Objekt befinden. Dadurch wird es möglich, von jedem Punkt in der Szene aus eine Auswahl vorzunehmen.
void setTouchpoint(Item target, point position, int pointId, bool pressed)
Sendet ein synthetisches Touch-Ereignis an target und verschiebt dabei den Touch-Punkt mit der ID pointId zu position, wobei pressed bestimmt, ob der Punkt gedrückt wird. Außerdem wird das entsprechende Touch-Release-Ereignis gesendet, falls pointId zuvor auf einem anderen Element aktiv war.
object touchpointState(int pointId)
Diese Methode gibt den Status des Berührungspunkts mit der ID „ pointId “ zurück. Der Status wird durch eine Zuordnung von Eigenschaftsnamen zu Werten dargestellt:
| Schlüssel | Typ | Beschreibung |
|---|---|---|
grabbed | bool | Wird der Punkt von einem Element erfasst? Wenn „ false “, sind alle anderen Werte „ undefined “. |
target | XrItem | Das Element, das den Berührungspunkt erfasst, oder „ null “, falls kein „ XrItem “ vorhanden ist. |
pressed | bool | Wird der Berührungspunkt gedrückt? |
cursorPos | point | Die 2D-Position des Berührungspunkts innerhalb target |
touchDistance | real | Der Abstand von der Ebene zum Berührungspunkt. Er ist „ 0 “, wenn „ pressed “ „ true “ ist. |
surfacePoint | vector3d | Die Position des Berührungspunkts im Szenenraum. [seit 6.11] |
normal | vector3d | Der Normalenvektor am Berührungspunkt im Szenenraum. [seit 6.11] |
uvPosition | vector2d | Die UV-Position am Berührungspunkt. [seit 6.11] |
model | Model | Das Modell, das den Berührungspunkt erfasst, oder ` null `, falls kein Modell vorhanden ist. [seit 6.11] |
© 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.