Sur cette page

XrView QML Type

Configure la vue d'une application Xr. En savoir plus...

Import Statement: import QtQuick3D.Xr
Since: Qt 6.8
Inherits:

Node

Status: Technology preview

Ce type est en préversion technologique et est susceptible d'être modifié.

Propriétés

Signaux

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 configure la vue d'une application XR. L'extrait de code suivant est tiré de l'exemple simple 3D Xr de l'Qt Quick 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
    }

Remarques sur la plateforme

Appareils Meta Quest

Pour utiliser la fonctionnalité « enable passthrough », vous devez ajouter l'autorisation suivante au fichier ` AndroidManifest.xml ` de votre application :

<uses-feature android:name="com.oculus.feature.PASSTHROUGH" android:required="false"/>

Documentation sur les propriétés

depthSubmissionEnabled : bool [default: false]

Détermine si l'envoi du tampon de profondeur au compositeur XR est activé.

Par défaut, le tampon de profondeur utilisé par la scène 3D dans l'XrView e n'est pas exposé au compositeur XR. Cependant, sur certaines plateformes, l'envoi de la profondeur est implicite et ne peut être désactivé ni contrôlé par l'application. VisionOS en est un exemple. La modification de cette propriété n'a aucun effet sur ces plateformes. Ailleurs, notamment avec OpenXR, 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 sur true. Cela n’aura tout simplement aucun effet si la pile sous-jacente ne le prend pas en charge. Pour vous en assurer, vous pouvez inspecter la sortie de débogage afin de vérifier si la soumission de la profondeur est utilisée. La soumission du tampon de profondeur peut améliorer les reprojections que le compositeur XR est susceptible d’effectuer. Une reprojection peut se produire, par exemple, lorsque le système ne parvient pas à maintenir la fréquence d’images cible et doit donc recourir à la prédiction du contenu des images afin d’améliorer et de stabiliser la perception de la scène par l’utilisateur et de réduire les risques de mal des transports. Cependant, l’application et Qt n’ont aucun contrôle sur l’utilisation des données. Il peut également arriver que l’envoi des données de profondeur n’ait aucun effet concret et soit ignoré par le runtime XR et le compositeur sous-jacents.

En pratique, l’envoi du tampon de profondeur implique un rendu dans une texture de profondeur fournie par le moteur d’exécution XR plutôt que dans la texture intermédiaire ou le tampon de rendu créé et géré par Qt. Le rendu dans une texture de profondeur a certaines conséquences de bas niveau pouvant avoir un impact sur les performances :

Lorsqu’on utilise l’anti-aliasing par échantillonnage multiple ( multisample antialiasing, MSAA), l’activation de l’envoi de la profondeur implique un rendu dans une texture de profondeur à échantillonnag , puis la résolution des échantillons dans la texture de profondeur non multisample fournie par le runtime XR. Sans l’envoi de la profondeur, l’étape de résolution ne serait pas nécessaire. De plus, certaines API 3D ne prennent pas en charge la résolution des données de profondeur-stencil multi-échantillonnées (voir le drapeau « QRhi::ResolveDepthStencil » pour plus de détails). En l’absence de cette prise en charge, les tentatives d’activation de la soumission de profondeur en combinaison avec le MSAA sont ignorées de manière gracieuse.

Même lorsque le 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 permettent de contrôler cette opération. L’opération de stockage des données de profondeur/stencil est généralement signalée par Qt comme superflue, ce qui peut avoir des effets positifs sur les performances des architectures GPU en mosaïque. Ce n’est pas le cas avec la soumission de profondeur, car les données de profondeur doivent toujours être écrites du point de vue de Qt.

Remarque : nous recommandons aux développeurs de tester leurs applications avec la soumission de profondeur activée, d’en évaluer les avantages et les inconvénients, puis de choisir en toute connaissance de cause, sur la base de leurs tests, s’ils souhaitent l’activer ou non.

environment : SceneEnvironment

Contient

Contient l’ SceneEnvironment s de la vue XR.

fixedFoveation : enumeration [default: XrView.HighFoveation]

Permet de contrôler le niveau de rendu fovéal fixe pour l'XrView.

Le rendu fovéal réduit la charge du GPU en diminuant la qualité de l’image (résolution) dans les zones où la différence est moins perceptible à l’œil nu. Avec le rendu fovéal fixe, les zones où la fidélité visuelle est réduite sont fixes et ne changent pas. Sur certaines plateformes, le concept de rendu fovéal fixe n’existe pas et il n’est pas possible de le contrôler. Par exemple, les appareils basés sur VisionOS effectuent un rendu fovéal dynamique, basé sur le suivi oculaire ; ainsi, la valeur de cette propriété est ignorée dans la pratique. D’autres appareils, tels que le Meta Quest 3, ne prennent en charge que le rendu fovéal fixe, ce qui rend cette propriété pertinente.

La valeur peut être l’une des suivantes :

ConstanteDescription
XrView.NoFoveation0, pas de rendu fovéal.
XrView.LowFoveation1, fovéation faible.
XrView.MediumFoveation2, fovéation moyenne.
XrView.HighFoveation3, fovéation élevée.

Lorsque cette fonctionnalité est prise en charge, la valeur par défaut est HighFoveation. Par conséquent, il devrait être rarement nécessaire de modifier cette valeur dans les applications.

isQuitOnSessionEndEnabled : bool

Indique si l'application doit se fermer à 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é vous indique si le rendu multi-vues est effectivement utilisé lors de l'exécution. Lorsqu'il n'est pas pris en charge, la valeur revient à « false ».

Il est recommandé d’activer le rendu multi-vues. Cela permet d’améliorer les performances et de réduire la consommation d’énergie du processeur et du processeur graphique. Par défaut, cette option est désactivée afin de garantir une compatibilité maximale. Les développeurs sont invités à vérifier que leur application s’affiche comme prévu lorsque multiViewRenderingEnabled est défini sur « true », puis à conserver ce paramètre par la suite.

Remarque : certaines fonctionnalités d’ Qt Quick et de Quick 3D impliquant du code de shader fourni par l’application peuvent nécessiter une modification de ce code pour être compatibles avec le rendu multi-vues. C’est notamment le cas 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 explique comment désactiver le rendu multi-vues.

Voir également « multiViewRenderingSupported » et « Rendu multivue ».

multiViewRenderingSupported : bool

Cette propriété en lecture seule indique si le rendu Multiview est disponible.

Voir également multiViewRenderingEnabled.

passthroughEnabled : bool

Valeur

Indique si le passthrough est activé pour la vue XR.

passthroughSupported : bool

Indique

Indique si le passthrough est pris en charge pour la vue XR.

referenceSpace : enumeration [default: XrView.ReferenceSpaceLocal]

Récupère ou définit l'espace de référence de la vue XR.

Elle peut prendre l'une des valeurs suivantes :

ConstanteDescription
XrView.ReferenceSpaceUnknown 
XrView.ReferenceSpaceLocalL'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.ReferenceSpaceStageL'origine se trouve au niveau du sol, au centre de la zone définie par l'utilisateur.
XrView.ReferenceSpaceLocalFloorL'origine se trouve au niveau du sol, en dessous de la position de vue par défaut.

ReferenceSpaceLocal Cette option est principalement utile pour les applications en position assise où le contenu n'est pas positionné par rapport au sol, par exemple les menus flottants. Le contenu se déplacera lorsque l'utilisateur réinitialisera la vue.

ReferenceSpaceStage Cette option est principalement utile pour les applications à l'échelle de la pièce où l'utilisateur se déplace librement dans la zone de jeu. Le contenu ne se déplacera pas lorsque l'utilisateur réinitialisera la vue.

ReferenceSpaceLocalFloor Cette option est principalement utile pour les applications stationnaires (assis ou debout) où le contenu est positionné par rapport au sol. Le contenu se déplacera lorsque l’utilisateur réinitialisera 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 l’option « ReferenceSpaceLocal » auront leur origine au niveau du sol sur visionOS, ce qui peut entraîner l’affichage du contenu à une position inattendue. Pour remédier à cela, les applications peuvent vérifier la propriété « referenceSpace » lors de l’exécution et ajuster la position verticale de leur contenu en conséquence. Par exemple :

y: xrView.referenceSpace === XrView.ReferenceSpaceLocalFloor ? 130 : 0

renderStats : RenderStats

Contient

Contient les statistiques de rendu pour la vue XR.

runtimeInfo : QQuick3DXrRuntimeInfo

Fournit

Fournit des informations sur le moteur d'exécution XR pour la vue XR.

xrOrigin : XrOrigin

Contient 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 sert à positionner les objets suivis, tels que la caméra et les manettes, dans la scène. Une application peut comporter 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)

Générée en cas d'échec de l'initialisation ; un nouvel objet ` errorString ` décrivant l'échec est alors disponible.

Remarque : le gestionnaire correspondant est onInitializeFailed.

sessionEnded()

Émis à 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, dans un rayon de radius. Si model est null, l'objet le plus proche situé dans radius sera identifié.

Si aucun objet de ce type n'existe, la valeur null est renvoyée.

Cette méthode a été introduite dans Qt 6.11.

vector3d processTouch(vector3d position, int pointId)

Cette méthode recherche un « XrItem » ou un « Model » doté d’un « sourceItem texture » à proximité de « position » et envoie un événement tactile virtuel avec l’ID du point de contact « pointId » si « position » correspond à un point de la surface.

La valeur renvoyée correspond au décalage entre position et le point touché sur la surface. Cela peut être utilisé pour empêcher un modèle de main de traverser une XrItem.

Voir également XrHandModel.

pickResult rayPick(vector3d origin, vector3d direction)

Cette méthode envoie un rayon dans la scène à partir de l'origin, dans l'direction, et renvoie des informations sur le point d'intersection le plus proche avec un objet de la scène.

Par exemple, transmettez la position et le vecteur de direction d'un objet quelconque de la scène pour déterminer quel objet se trouve devant un élément. Cela permet d'effectuer un « 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 « envoie » un rayon dans la scène à partir de l’ origin et dans l’ direction, et renvoie des informations sur l’intersection entre le rayon et l’ model spécifié.

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 l'origin, dans la direction direction, et renvoie une liste d'informations concernant les intersections les plus proches avec les objets de la scène. La liste est pré-triée par distance par rapport à l'origine, le long du vecteur de direction : les intersections les plus proches apparaissent en premier et les plus éloignées en dernier.

Cette méthode peut, par exemple, être appelée avec la position et le vecteur de progression de n'importe quel objet d'une scène afin de déterminer quels objets se trouvent devant un élément donné. Cela permet d'effectuer un « picking » à 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 tactile portant l'ID pointId vers position, l'pressed déterminant si le point est enfoncé. Envoie également l'événement de relâchement tactile approprié si pointId était auparavant actif sur un autre élément.

object touchpointState(int pointId)

Cette méthode renvoie l'état du point tactile portant l'ID « pointId ». L'état est représenté par une carte associant des noms de propriétés à des valeurs :

CléTypeDescription
grabbedboolLe point est-il saisi par un élément ? Si false, toutes les autres valeurs sont undefined.
targetXrItemL’élément qui saisit le point de contact, ou « null » s’il n’y a pas d’ XrItem.
pressedboolLe point de contact est-il enfoncé ?
cursorPospointLa position 2D du point de contact au sein de target
touchDistancerealLa distance entre le plan et le point de contact. Elle sera « 0 » si « pressed » est « true ».
surfacePointvector3dLa position du point de contact dans l'espace de la scène. [depuis la version 6.11]
normalvector3dLe vecteur normal au point de contact dans l’espace de la scène. [depuis la version 6.11]
uvPositionvector2dLa position UV au point de contact. [depuis la version 6.11]
modelModelLe modèle qui saisit le point de contact, ou ` null ` s'il n'y a pas de modèle. [depuis la version 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.