-
VIVE Wave
-
SDK
-
发布您的应用程序
-
-
VIVE SRWorks
-
VIVE 眼球和面部追踪
-
VIVE 手势追踪
-
VIVE 3DSP Audio
-
VIVEPORT
-
VIVE Business 串流
-
面部追踪
-
如何在同一场景中切换 6DoF 和 3DoF?
如果您使用的是6DoF 设备且在 6DoF 模式下运行,可以假设内容可在 6DoF 和 3DoF 之间切换。
如果您的内容要在 3DoF 和 6DoF 之间切换,以下是需要注意的事项。
头戴式设备和操控手柄
在 3DoF 模式中,由于固定转换,操控手柄通常位于您的前方。固定变换使操控手柄和用户之间保持一定距离,即使移动操控手柄,该距离也可能不会改变。但在 6DoF 模式中,必须删除固定转换。如果未删除,操控手柄和用户之间始终会有一个固定的距离。
在 6DoF 模式中,操控手柄通常被放置在与头戴式设备相同的位置。此位置是位置传感器的原点,
Vector3(0, 0, 0). 如果切换到 3DoF 模式,头戴式设备和操控手柄会始终固定在原点。
在 VR 世界中,如果头戴式设备和操控手柄的 GameObject 没有其他操作,您可能会看到头部被放置在地板上,操控手柄的模型会从头部位置突出来。因此,仍需要固定转换以保持操控手柄和地板之间的距离。
姿势追踪器
在 3DoF 模式下,将 WaveVR_PoseTracker 中的trackPosition 设置为 false。此标记不会将位置更新为 GameObject 的转换,并可在您的脚本中完成。
controllerGameObject.GetComponent<WaveVR_PoseTracker>().trackPosition = false;
将 trackPosition 设置为 true 以切换到 6DoF 模式。
渲染
采集姿势时,渲染器将 origin type 设置为系统每帧。原点类型决定了姿势坐标(0, 0, 0)的显示方式。
提示: 原点类型可以在运行时中更改。
在 3DoF 模式中,将 WaveVR 的 render.origin 设置为 WVR_PoseOriginModel.WVR_PoseOriginModel_OriginOnHead_3DoF。有关详细信息,请参见 SDK API 的说明。
var render = WaveVR_Render.Instance; render.origin = WVR_PoseOriginModel.WVR_PoseOriginModel_OriginOnHead_3DoF;
从眼睛到头部的转换
眼睛到头部的转换是将眼睛空间坐标更改为头部空间坐标的转换。
例如:如果您的左眼在位置(0, 0, 1)处看到一个苹果,则该苹果在世界上的实际位置是:
HeadPose * EyeToHeadTransform * (0,0,1)
假设 EyeToHeadTransform 为:
| 1 0 0 -0.03 | | 0 1 0 0 | | 0 0 1 0 | | 0 0 0 1 |
头戴式设备的转换为:
| 1 0 0 0 | | 0 1 0 1.8 | | 0 0 1 0 | | 0 0 0 1 |
眼睛的转换(-0.03, 0, 0)可以从头部空间获取。苹果的位置为:
- 头部空间坐标(-0.03, 0, 1)
- 世界空间坐标(-0.03, 1.8, 1)
苹果的位置也可以通过逆转换,从世界空间和眼睛空间中得知。
EyeToHeadTransform^-1 * HeadPose^-1 * (-0.03, 1.8, 1)
EyeToHeadTransform 在 6DoF 和 3DoF 中可能具有不同的值。
left eye in 6DoF | 1 0 0 -0.03 | | 0 1 0 0.05 | | 0 0 1 0.05 | | 0 0 0 1 | left eye in 3DoF | 1 0 0 -0.03 | | 0 1 0 0 | | 0 0 1 -0.15 | | 0 0 0 1 |
6DoF 模式中转换的值会根据您的头戴式设备而变化。3DoF 模式中,转换的值会基于头部的旋转中心(其中 Z 轴的值通常为 -0.15),以获得更好的用户体验。
此内容对您有帮助吗?
是
否
提交
谢谢!您的反馈可以帮助其他人了解最有用的信息。