XrView QML Type
Définit la vue pour une application Xr. Plus d'informations...
| Import Statement: | import QtQuick3D.Xr |
| Since: | Qt 6.8 |
| Inherits: |
Propriétés
- depthSubmissionEnabled : bool
- environment : SceneEnvironment
- fixedFoveation : enumeration
- isQuitOnSessionEndEnabled : bool
- multiViewRenderingEnabled : bool
- multiViewRenderingSupported : bool
- passthroughEnabled : bool
- passthroughSupported : bool
- referenceSpace : enumeration
- renderStats : RenderStats
- runtimeInfo : QQuick3DXrRuntimeInfo
- xrOrigin : XrOrigin
Signaux
- initializeFailed(const QString &errorString)
- sessionEnded()
Méthodes
- 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)
Description détaillée
Un XrView définit la vue d'une application XR. L'extrait suivant est tiré du siteQt Quick 3D Xr Simple Example et montre comment utiliser ce type.
// 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 }
Notes sur la plate-forme
Appareils Meta Quest
Pour enable passthrough, vous devez ajouter la permisson suivante au fichier AndroidManifest.xml de votre application :
<uses-feature android:name="com.oculus.feature.PASSTHROUGH" android:required="false"/>
Propriété Documentation
depthSubmissionEnabled : bool [default: false]
Contrôle si la soumission du tampon de profondeur au compositeur XR est activée.
Par défaut, le tampon de profondeur utilisé par la scène 3D dans le site XrView n'est pas exposé au compositeur XR. Cependant, sur certaines plateformes, la soumission de la profondeur est implicite et ne peut pas être désactivée ou contrôlée par l'application. VisionOS en est un exemple. La modification de cette propriété n'a aucun effet sur ces plates-formes. Ailleurs, avec OpenXR en particulier, la prise en charge dépend de l'implémentation OpenXR utilisée au moment de l'exécution.
Il est toujours prudent de définir depthSubmissionEnabled à true. Cette propriété n'aura aucun effet si elle n'est pas prise en charge par la pile sous-jacente. Pour être sûr, vous pouvez inspecter la sortie de débogage pour voir si la soumission de profondeur est utilisée. La soumission du tampon de profondeur peut améliorer les reprojections que le compositeur XR peut effectuer. La reprojection peut se produire, par exemple, lorsque le système ne peut pas maintenir la fréquence d'images cible et doit donc recourir à la prédiction du contenu des images pour améliorer et stabiliser la perception de la scène par l'utilisateur et réduire le mal des transports éventuel. Cependant, l'application et Qt n'ont aucun contrôle sur l'utilisation des données. Il se peut également que la transmission des données de profondeur n'ait aucun effet pratique et soit ignorée par le moteur d'exécution et le compositeur XR sous-jacents.
En pratique, la soumission du tampon de profondeur implique un rendu dans une texture de profondeur fournie par le moteur d'exécution XR au lieu de la texture intermédiaire/tampon de rendu créée et gérée par Qt. Le rendu dans une texture de profondeur a certaines conséquences à un niveau inférieur qui peuvent avoir un impact sur les performances :
Lors de l'utilisation de multisample antialiasing (MSAA), l'activation de la soumission de profondeur implique le rendu dans une texture de profondeur multi-échantillons et la résolution des échantillons dans la texture de profondeur non multi-échantillons fournie par le moteur d'exécution XR. Sans la soumission de profondeur, l'étape de résolution ne serait pas nécessaire. En outre, certaines API 3D ne prennent pas en charge la résolution des données de profondeur multi-échantillons (voir l'indicateur QRhi::ResolveDepthStencil pour plus de détails). Sans cette prise en charge, les tentatives d'activation de la soumission de profondeur en combinaison avec MSAA sont ignorées de manière élégante.
Même si MSAA n'est pas utilisé, l'activation de la soumission de profondeur déclenche l'écriture des données de profondeur avec les API 3D qui en ont le contrôle. L'opération de stockage des données de profondeur/stencil est généralement indiquée par Qt comme inutile, ce qui peut avoir un impact positif sur les performances des architectures GPU à mosaïques. Cette opération n'est pas effectuée avec la soumission de profondeur car les données de profondeur doivent toujours être écrites du point de vue de Qt.
Note : Nous avons recommandé aux développeurs de tester leurs applications avec la soumission de profondeur activée, d'évaluer les avantages et les inconvénients, et de faire un choix conscient basé sur leurs tests s'ils souhaitent l'activer ou non.
environment : SceneEnvironment
Tient
Maintient le site SceneEnvironment pour la vue XR.
fixedFoveation : enumeration [default: XrView.HighFoveation]
Contrôle le niveau de rendu fixe avec fovéation pour le site XrView.
Le rendu avec fovéation réduit la charge du GPU en réduisant la qualité de l'image (résolution) dans les zones où la différence est moins perceptible à l'œil. Dans le cas d'un rendu fixe, les zones où la fidélité visuelle est réduite sont fixes et ne changent pas. Sur certaines plateformes, il n'y a pas de concept de rendu fixe par fovéation ni de contrôle sur celui-ci. Par exemple, les appareils basés sur VisionOS effectuent une fovéation dynamique, suivie par l'œil ; la valeur de cette propriété est donc ignorée dans la pratique. D'autres appareils, comme le Meta Quest 3, ne prennent en charge que la fovéation fixe, ce qui rend cette propriété pertinente.
La valeur peut être l'une des suivantes
| Constante | Description |
|---|---|
XrView.NoFoveation | 0, pas de fovéation. |
XrView.LowFoveation | 1, faible fovéation. |
XrView.MediumFoveation | 2, fovéation moyenne. |
XrView.HighFoveation | 3, fovéation élevée. |
Lorsqu'elle est prise en charge, la valeur par défaut est HighFoveation. Par conséquent, la modification de cette valeur dans les applications devrait être rarement nécessaire dans la pratique.
isQuitOnSessionEndEnabled : bool
Indique si l'application doit se terminer à la fin de la session XR.
multiViewRenderingEnabled : bool [default: true]
Il s'agit d'une propriété en lecture seule qui indique si le rendu multivue est activé pour la vue XR.
Cette propriété indique si le rendu multivue est effectivement utilisé au moment de l'exécution. Lorsqu'il n'est pas pris en charge, la valeur est ramenée à false.
Il est recommandé d'activer le rendu multi-vues. Elle permet d'améliorer les performances et de réduire l'utilisation de la puissance du processeur et du processeur graphique. La valeur par défaut est désactivée afin d'assurer une compatibilité maximale. Les développeurs sont invités à vérifier que le rendu de leur application est conforme aux attentes lorsque multiViewRenderingEnabled est défini sur true, puis à le laisser défini par la suite.
Remarque : certaines fonctionnalités de Qt Quick et de Quick 3D qui impliquent un code de nuanceur fourni par l'application peuvent nécessiter la modification de ce code pour être compatibles avec le mode multi-vues. Il s'agit par exemple des matériaux 2D et 3D personnalisés et des effets de post-traitement. La documentation sur le rendu multi-vues fournit plus d'informations à ce sujet et sur la manière de désactiver le rendu multi-vues.
Voir également multiViewRenderingSupported et Multiview Rendering.
multiViewRenderingSupported : bool
Cette propriété en lecture seule indique la disponibilité du rendu multi-vues.
Voir aussi multiViewRenderingEnabled.
passthroughEnabled : bool
Maintient
Indique si l'option passthrough est activée pour la vue XR.
passthroughSupported : bool
Indique
Indique si le passthrough est pris en charge pour la vue XR.
referenceSpace : enumeration [default: XrView.ReferenceSpaceLocal]
Obtient ou définit l'espace de référence pour la vue XR.
Il peut s'agir de l'un des éléments suivants
| Constante | Description |
|---|---|
XrView.ReferenceSpaceUnknown | |
XrView.ReferenceSpaceLocal | L'origine se trouve à la position par défaut de la vue (généralement définie par une opération de "réinitialisation de la vue"). |
XrView.ReferenceSpaceStage | L'origine est à la hauteur du sol, au centre de la zone définie par l'utilisateur. |
XrView.ReferenceSpaceLocalFloor | L'origine est à la hauteur du sol, en dessous de la position de vue par défaut. |
ReferenceSpaceLocal est principalement utile pour les applications assises où le contenu n'est pas positionné par rapport au sol, par exemple les menus flottants. Le contenu se déplace lorsque l'utilisateur réinitialise la vue.
ReferenceSpaceStage est principalement utile pour les applications à l'échelle d'une pièce où l'utilisateur se déplace librement dans l'espace de jeu. Le contenu ne bougera pas lorsque l'utilisateur réinitialisera la vue.
ReferenceSpaceLocalFloor est principalement utile pour les applications stationnaires (assis ou debout) où le contenu est positionné par rapport au sol. Le contenu se déplace lorsque l'utilisateur réinitialise la vue.
Remarque : sur visionOS, l'espace de référence est toujours ReferenceSpaceLocalFloor et ne peut pas être modifié. Cela signifie que les applications conçues avec ReferenceSpaceLocal auront leur origine au niveau du sol sur visionOS, ce qui peut faire apparaître le contenu à une position inattendue. Pour résoudre ce problème, les applications peuvent vérifier la propriété referenceSpace au moment de l'exécution et ajuster la position verticale de leur contenu en conséquence. En voici un exemple :
y: xrView.referenceSpace === XrView.ReferenceSpaceLocalFloor ? 130 : 0
renderStats : RenderStats
Maintient
Conserve les statistiques de rendu pour la vue XR.
runtimeInfo : QQuick3DXrRuntimeInfo
Fournit
Fournit des informations sur l'exécution XR pour la vue XR.
xrOrigin : XrOrigin
Détient l'origine XR active.
L'origine XR est le point de la scène considéré comme l'origine du système de coordonnées XR. L'origine XR est utilisée pour positionner les objets suivis tels que la caméra et les contrôleurs dans la scène. Une application peut avoir plusieurs XrOrigins, mais une seule peut être active à la fois.
Remarque : cette propriété doit être définie pour que la scène soit rendue en XR.
Voir également XrOrigin.
Documentation sur les signaux
initializeFailed(const QString &errorString)
Emis lorsque l'initialisation échoue et qu'il existe un nouveau errorString décrivant l'échec.
Remarque : le gestionnaire correspondant est onInitializeFailed.
sessionEnded()
Emis à la fin de la session.
Remarque : le gestionnaire correspondant est onSessionEnded.
Documentation de la méthode
[since 6.11] pickResult closestPointPick(vector3d origin, float radius, Model model)
Cette méthode permet de trouver le point de la surface de model le plus proche de origin, à une distance de radius. Si model est null, l'objet le plus proche à l'intérieur de radius sera trouvé.
Si un tel objet n'existe pas, null est renvoyé.
Cette méthode a été introduite dans Qt 6.11.
vector3d processTouch(vector3d position, int pointId)
Cette méthode recherche un XrItem, ou un modèle avec sourceItem texture, à proximité de position et envoie un événement tactile virtuel avec l'ID de point tactile pointId si position correspond à un point de la surface.
La valeur de retour est le décalage entre position et le point touché sur la surface. Cette fonction peut être utilisée pour empêcher un modèle de main de passer par un point XrItem.
Voir également XrHandModel.
pickResult rayPick(vector3d origin, vector3d direction)
Cette méthode envoie un rayon dans la scène à partir de origin et à direction et renvoie des informations sur l'intersection la plus proche avec un objet de la scène.
Par exemple, transmettez la position et le vecteur d'avancement de n'importe quel objet de la scène pour savoir quel objet se trouve devant un élément. Il est ainsi possible de faire du picking à partir de n'importe quel point de la scène.
[since 6.11] pickResult rayPick(vector3d origin, vector3d direction, Model model)
Cette méthode "tire" un rayon dans la scène à partir de origin et dans direction et renvoie des informations sur l'intersection entre le rayon et l'adresse spécifiée model.
Cette méthode a été introduite dans Qt 6.11.
List<pickResult> rayPickAll(vector3d origin, vector3d direction)
Cette méthode envoie un rayon dans la scène à partir de origin et à direction et renvoie une liste d'informations sur les intersections les plus proches avec des objets de la scène. La liste est triée en fonction de la distance par rapport à l'origine le long du vecteur de direction, les intersections les plus proches apparaissant en premier et les plus éloignées en dernier.
Cette fonction peut, par exemple, être appelée avec la position et le vecteur de direction de n'importe quel objet de la scène pour voir quels sont les objets qui se trouvent devant un élément. Il est ainsi possible de faire de la cueillette à partir de n'importe quel point de la scène.
void setTouchpoint(Item target, point position, int pointId, bool pressed)
Envoie un événement tactile synthétique à target, en déplaçant le point de contact avec l'ID pointId vers position, pressed déterminant si le point est pressé. Envoie également l'événement de relâchement du toucher approprié si pointId était précédemment actif sur un autre élément.
object touchpointState(int pointId)
Cette méthode renvoie l'état du point de contact dont l'ID est pointId. L'état est représenté par une carte des noms de propriétés aux valeurs :
| Clé | Type de propriété | Description de l'état |
|---|---|---|
grabbed | bool | Le point est-il saisi par un élément ? Si false, toutes les autres valeurs sont undefined. |
target | XrItem | L'élément qui saisit le point de contact, ou null s'il n'y a pas de XrItem. |
pressed | bool | Le point de contact est-il enfoncé ? |
cursorPos | point | La position 2D du point de contact à l'intérieur de target |
touchDistance | real | La distance entre le plan et le point de contact. Elle sera 0 si pressed est true. |
surfacePoint | vector3d | La position du point de contact dans l'espace de la scène. [depuis 6.11] |
normal | vector3d | Le vecteur normal au point de contact dans l'espace de la scène. [depuis 6.11] |
uvPosition | vector2d | La position UV du point de contact. [depuis 6.11] |
model | Model | Le modèle qui saisit le point de contact, ou null s'il n'y a pas de modèle. [depuis 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.