Qt Quick 3D - XR 自由瞬移示例

演示如何在Qt Quick 3D XR 中实现简单的移动。

概述

本示例展示了如何使用简单的自由形式传送系统(一种非连续运动形式)移动到虚拟环境中的位置。

控制

使用右控制器上的拇指摇杆进行导航:

  • 向前推动摇杆瞄准目标,松开摇杆进行传送。
  • 向侧面移动摇杆则可旋转。

执行

传送逻辑在FreeformTeleporter 组件中实现。该组件位于单独的子项目xr_shared 中,因此您可以轻松地在其他项目中重复使用。

FreeformTeleporter {
    id: teleporter

    view: xrView
    originNode: xrOrigin
    cameraNode: xrOrigin.camera
    beamHandle: xrRightController

    rotationTriggerValue: xrRightController.xValue
    teleportTriggerValue: xrRightController.yValue

    onDoTeleportation: (cameraOriginPosition)=> {
                           xrOrigin.position = cameraOriginPosition
                       }
    onDoRotation: (cameraOriginRotation, cameraOriginPosition)=> {
                      xrOrigin.rotation = cameraOriginRotation
                      xrOrigin.position = cameraOriginPosition
                  }
}

FreeformTeleporter 组件需要设置以下属性:

QtObject xrView

xrView 属性允许访问XrView 的内置光线选取功能。您可以使用任何实现rayPick 方法的对象。例如,View3D 可能对原型设计有用。

Node originNode

originNode 属性指定了自由形式远距传送器将操纵的节点。在 XR 中,人工移动是通过移动XrOrigin 来实现的。因此,我们将使用XrView 的 xrOrigin 作为originNode

Node cameraNode

cameraNode 属性提供了摄像机的位置。旋转时,它定义旋转中心。在远距传物时,它定义了将放置在所选位置上方的位置。在本例中,我们使用之前创建的跟踪XrCamera

注: 在 XR 中,XrOrigin 定义了场景与用户参考空间之间的关系。这个参考空间通常锚定在用户周围的物理空间上。改变XrOrigin 的位置将改变物理位置与场景坐标之间的映射关系。XrCamera 会跟踪用户头部的位置。当用户物理移动时,XrCamera 的位置和方向将相对于XrOrigin 发生变化。

Node beamHandle

beamHandle 属性是用作传送光束起点的节点。在本示例中,我们使用右控制器作为 beamHandle。

示例项目 @ code.qt.io

另请参阅 Qt Quick 3D Xr 中的运动

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