En esta página

XrView QML Type

Configura la vista para una aplicación Xr. Más...

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

Node

Propiedades

Señales

Métodos

  • 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)

Descripción detallada

Un XrView configura la vista para una aplicación XR. El siguiente fragmento es del Qt Quick 3D Xr Simple Example y muestra cómo utilizar el tipo.

// 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
    }

Notas sobre la plataforma

Dispositivos Meta Quest

Para enable passthrough necesita añadir el siguiente permisson el archivo AndroidManifest.xml de su aplicación:

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

Propiedad Documentación

depthSubmissionEnabled : bool [default: false]

Controla si está activado el envío del búfer de profundidad al compositor XR.

Por defecto, el búfer de profundidad utilizado por la escena 3D en XrView no se expone al compositor XR. Sin embargo, en algunas plataformas, el envío de profundidad está implícito y no puede ser desactivado o controlado por la aplicación. Un ejemplo de esto es VisionOS. Cambiar esta propiedad no tiene ningún efecto en esas plataformas. En otros casos, con OpenXR en particular, la compatibilidad depende de la implementación de OpenXR utilizada en tiempo de ejecución.

Siempre es seguro establecer depthSubmissionEnabled a true. Simplemente no tendrá efecto cuando no esté soportado por la pila subyacente. Para estar seguro, puedes inspeccionar la salida de depuración para ver si el envío de profundidad está en uso. El envío del búfer de profundidad puede mejorar las reproyecciones que puede realizar el compositor XR. La reproyección podría producirse, por ejemplo, cuando el sistema no puede mantener la velocidad de fotogramas objetivo y, por tanto, tiene que recurrir a la predicción del contenido de los fotogramas para mejorar y estabilizar la percepción de la escena por parte del usuario y reducir el posible mareo por movimiento. Sin embargo, la aplicación y Qt no tienen control sobre el uso de los datos. También puede ocurrir que el envío de datos de profundidad no tenga efectos prácticos y sea ignorado por el tiempo de ejecución XR subyacente y el compositor.

En la práctica, enviar el buffer de profundidad implica renderizar en una textura de profundidad proporcionada por el runtime XR en lugar del buffer intermedio de textura/render creado y gestionado por Qt. Renderizar en una textura de profundidad tiene ciertas consecuencias de bajo nivel que pueden afectar al rendimiento:

Cuando se utiliza multisample antialiasing (MSAA), activar el envío de profundidad implica renderizar en una textura de profundidad multimuestra y resolver las muestras en la textura de profundidad no multimuestra proporcionada por el tiempo de ejecución XR. Sin la presentación de profundidad, el paso de resolución no sería necesario. Además, algunas API 3D no admiten la resolución de datos de profundidad multimuestra (consulte la bandera QRhi::ResolveDepthStencil para obtener más detalles). Sin este soporte, los intentos de habilitar el envío de profundidad en combinación con MSAA son ignorados.

Incluso cuando no se utiliza MSAA, la activación del envío de profundidad activa la escritura de datos de profundidad con las API 3D que tienen control sobre esto. Qt suele indicar que la operación de almacenamiento de los datos de profundidad/esténcil es innecesaria, lo que puede repercutir positivamente en el rendimiento de las arquitecturas de GPU en mosaico. Esto no se hace con el envío de profundidad porque los datos de profundidad siempre deben escribirse desde la perspectiva de Qt.

Nota: Recomendamos a los desarrolladores que prueben sus aplicaciones con el envío de profundidad activado, evalúen las ventajas y desventajas y, basándose en sus pruebas, decidan si desean activarlo o no.

environment : SceneEnvironment

Sujeta

Mantiene el SceneEnvironment para la vista XR.

fixedFoveation : enumeration [default: XrView.HighFoveation]

Controla el nivel de renderizado foveated fijo para XrView.

El renderizado foveated reduce la carga de la GPU reduciendo la calidad de la imagen (resolución) en las zonas donde la diferencia es menos perceptible para el ojo. Con el renderizado foveated fijo, las áreas con fidelidad visual reducida son fijas y no cambian. En algunas plataformas, no existe el concepto de renderizado foveated fijo ni control sobre él. Por ejemplo, los dispositivos basados en VisionOS realizan un foveado dinámico, con seguimiento ocular, por lo que el valor de esta propiedad se ignora en la práctica. Otros dispositivos, como el Meta Quest 3, sólo soportan foveación fija, lo que hace que esta propiedad sea relevante.

El valor puede ser uno de los siguientes

ConstanteDescripción
XrView.NoFoveation0, sin foveación.
XrView.LowFoveation1, foveación baja.
XrView.MediumFoveation2, foveación media.
XrView.HighFoveation3, foveación alta.

Cuando se admite, el valor predeterminado es HighFoveation. Por lo tanto, en la práctica no debería ser necesario cambiar este valor en las aplicaciones.

isQuitOnSessionEndEnabled : bool

Indica si la aplicación debe salir cuando finaliza la sesión XR.

multiViewRenderingEnabled : bool [default: true]

Esta es una propiedad de sólo lectura que informa si el Renderizado Multivista está habilitado para la vista XR.

Esta propiedad le indica si la renderización multivista está realmente en uso en tiempo de ejecución. Cuando no está soportado, el valor volverá a false.

Se recomienda activar el renderizado multivista. Puede mejorar el rendimiento y reducir el uso de CPU y GPU. Por defecto está desactivado para garantizar la máxima compatibilidad. Se recomienda a los desarrolladores que comprueben que su aplicación renderiza como se espera con multiViewRenderingEnabled establecido en true y que lo dejen establecido después.

Nota: Algunas funciones de Qt Quick y Quick 3D que implican código de sombreado proporcionado por la aplicación pueden necesitar que se modifique este código para que sea compatible con multivista. Ejemplos de ello son los materiales 2D y 3D personalizados y los efectos de postprocesado. La documentación Renderizado Multivista proporciona más información sobre esto y sobre cómo desactivar el renderizado multivista.

Véase también multiViewRenderingSupported y Renderizado Multivista.

multiViewRenderingSupported : bool

Esta propiedad de sólo lectura informa de la disponibilidad del Renderizado Multivista.

Véase también multiViewRenderingEnabled.

passthroughEnabled : bool

Indica

Indica si está activada la transferencia para la vista XR.

passthroughSupported : bool

Indica

Indica si se admite passthrough para la vista XR.

referenceSpace : enumeration [default: XrView.ReferenceSpaceLocal]

Obtiene o establece el espacio de referencia para la vista XR.

Puede ser uno de los siguientes

ConstanteDescripción
XrView.ReferenceSpaceUnknown
XrView.ReferenceSpaceLocalEl origen está en la posición por defecto de la vista (normalmente definida por una operación de "reiniciar vista").
XrView.ReferenceSpaceStageEl origen está a la altura del suelo, en el centro del área definida por el usuario.
XrView.ReferenceSpaceLocalFloorEl origen está a la altura del suelo, por debajo de la posición de vista por defecto.

ReferenceSpaceLocal es útil principalmente para aplicaciones sentadas en las que el contenido no está posicionado con respecto al suelo, por ejemplo menús flotantes. El contenido se moverá cuando el usuario restablezca la vista.

ReferenceSpaceStage es útil principalmente para aplicaciones a escala de sala en las que el usuario se moverá libremente dentro del área de reproducción. El contenido no se moverá cuando el usuario restablezca la vista.

ReferenceSpaceLocalFloor es útil principalmente para aplicaciones fijas (sentado o de pie) en las que el contenido está situado en relación con el suelo. El contenido se moverá cuando el usuario restablezca la vista.

Nota: En visionOS, el espacio de referencia es siempre ReferenceSpaceLocalFloor y no puede cambiarse. Esto significa que las aplicaciones diseñadas con ReferenceSpaceLocal tendrán su origen a nivel del suelo en visionOS, lo que puede hacer que el contenido aparezca en una posición inesperada. Para solucionar este problema, las aplicaciones pueden comprobar la propiedad referenceSpace en tiempo de ejecución y ajustar la posición vertical de su contenido en consecuencia. Por ejemplo:

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

renderStats : RenderStats

Contiene

Contiene las estadísticas de renderizado de la vista XR.

runtimeInfo : QQuick3DXrRuntimeInfo

Proporciona

Proporciona información sobre el tiempo de ejecución XR para la vista XR.

xrOrigin : XrOrigin

Mantiene activo el origen XR.

El origen XR es el punto de la escena que se considera el origen del sistema de coordenadas XR. El origen XR se utiliza para posicionar objetos rastreados como la cámara y los controladores en la escena. Una aplicación puede tener múltiples XrOrigins pero sólo uno puede estar activo a la vez.

Nota: Esta propiedad debe estar activada para que la escena se renderice en XR.

Véase también XrOrigin.

Documentación sobre señales

initializeFailed(const QString &errorString)

Se emite cuando falla la inicialización y hay un nuevo errorString que describe el fallo.

Nota: El manejador correspondiente es onInitializeFailed.

sessionEnded()

Se emite cuando finaliza la sesión.

Nota: El manejador correspondiente es onSessionEnded.

Documentación del método

[since 6.11] pickResult closestPointPick(vector3d origin, float radius, Model model)

Este método encontrará el punto de la superficie de model más cercano a origin, dentro de una distancia de radius. Si model es null, se encontrará el objeto más cercano dentro de radius.

Si no existe tal objeto, se devuelve null.

Este método se introdujo en Qt 6.11.

vector3d processTouch(vector3d position, int pointId)

Este método buscará un XrItem, o un Modelo con un sourceItem texture, cerca de position y enviará un evento de toque virtual con el ID del punto tocado pointId si position mapea a un punto en la superficie.

El valor devuelto es el desplazamiento entre position y el punto tocado en la superficie. Esto puede utilizarse para evitar que un modelo de mano pase a través de XrItem.

Véase también XrHandModel.

pickResult rayPick(vector3d origin, vector3d direction)

Este método disparará un rayo en la escena comenzando en origin y en direction y devolverá información sobre la intersección más cercana con un objeto en la escena.

Por ejemplo, pasa la posición y el vector de avance de cualquier objeto de la escena para ver qué objeto está delante de un elemento. Esto permite hacer picking desde cualquier punto de la escena.

[since 6.11] pickResult rayPick(vector3d origin, vector3d direction, Model model)

Este método "disparará" un rayo en la escena comenzando en origin y en direction y devolverá información sobre la intersección entre el rayo y el model especificado.

Este método se introdujo en Qt 6.11.

List<pickResult> rayPickAll(vector3d origin, vector3d direction)

Este método disparará un rayo en la escena comenzando en origin y en direction y devolverá una lista de información sobre las intersecciones más cercanas con objetos en la escena. La lista se ordena por distancia desde el origen a lo largo del vector de dirección, apareciendo en primer lugar las intersecciones más cercanas y en último lugar las más lejanas.

Esto puede, por ejemplo, ser llamado con la posición y el vector de dirección de cualquier objeto en una escena para ver qué objetos están delante de un elemento. Esto permite hacer picking desde cualquier punto de la escena.

void setTouchpoint(Item target, point position, int pointId, bool pressed)

Envía un evento táctil sintético a target, moviendo el punto táctil con ID pointId a position, con pressed determinando si el punto está pulsado. También envía el evento de liberación táctil apropiado si pointId estaba previamente activo en un elemento diferente.

object touchpointState(int pointId)

Este método devuelve el estado del punto de contacto con ID pointId. El estado se representa mediante un mapa de nombres de propiedades a valores:

ClaveTipoDescripción
grabbedbool¿El punto está agarrado por un elemento? Si false, todos los demás valores son undefined.
targetXrItemEl elemento que está agarrando el punto táctil, o null si no hay XrItem.
pressedbool¿Está pulsado el punto táctil?
cursorPospointLa posición 2D del punto táctil dentro de target
touchDistancerealLa distancia del plano al punto táctil. Será 0 si pressed es true.
surfacePointvector3dLa posición del punto táctil en el espacio de la escena. [desde 6.11]
normalvector3dEl vector normal al punto táctil en el espacio de la escena. [desde 6.11]
uvPositionvector2dLa posición UV en el punto táctil. [desde 6.11]
modelModelEl modelo que está agarrando el punto táctil, o null si no hay Modelo. [desde 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.