针对 VRED 2020.1 及更高版本编写新 Python 脚本时,请改为使用用于 VR 的 Python API v2。
使用 HTC Vive 时,只有一个显示模式选项,即 OpenVR HMD。
在“站立”或“房间比例”模式下,摄影机的 Z 轴平移值定义了地板标高。这意味着,场景中的 Z 值对应于跟踪空间中的物理地板。
由于对于 HTC Vive 来说,如何在 VRED 中设置摄影机以使场景中的虚拟地板与真实地板匹配都是相同的,因此请参见*如何通过更改摄影机平移设置地板标高*。
另一种可能的方案是使用 Python 函数 setOpenVRTrackingOrigin(Pnt3f(x,y,z))
调整跟踪值(如果场景中的地板不在 Z = 0)。
在下图中,使用 Python 函数 setOpenVRTrackingOrigin
修改了跟踪值:
如果要使用 Python 函数设置地板标高,请查看以下示例:
setOpenVRTrackingOrigin(Pnt3f(0.0, 337.0, 0.0))
。Python 函数 setOpenVRTrackingOrigin
指定偏移矢量。这会从 OpenVR 的位置跟踪值中减去。在激活 OpenVR 之前或者当 OpenVR 运行时,可以执行此函数。请注意,此函数期望位置处于特殊坐标系中。
如果 VRED 场景中的跟踪原点应位于 pos = (x\_scene, y\_scene, z_scene)
,则调用 Python 函数 setOpenVRTrackingOrigin(Pnt3f(-x\_scene, -z\_scene, y_scene))
。
启用 OpenVR HMD 显示模式后,激活视点。将以下 Python 函数粘贴到“终端”中以创建一个快捷方式,该快捷方式将激活 OpenVR 或脚本编辑器,然后设置一个名为 VR\_initial\_view
的视点。有关如何设置 VR 视点的信息,请参见 *视点*。
def activateOpenVR():
setDisplayMode(VR_DISPLAY_OPEN_VR)
jumpViewPoint('VR_initial_view')
keyA = vrKey(Key_A)
keyA.connect(activateOpenVR)
现在,每当您按 A 键时,VRED 将进入 OpenVR 模式并激活该视点。
在“终端”中执行的脚本不会保存在场景文件中。 要在场景中保存此脚本化快捷方式以备将来使用,请在脚本编辑器中输入 Python 代码。下次保存场景时,脚本将保存在 vpb 文件中。
如果要在 VRED 场景中查询被跟踪 HMD 的当前绝对位置,请使用:
matrix = getActiveCameraNode().getWorldTransform()
位置是:
x=matrix[3], y=matrix[7], z=matrix[11]
函数 getWorldTransform()
包括与活动摄影机节点结合使用时的跟踪变换。
可以使用以下 Python 函数(其中模式 0 表示“就坐”,模式 1 表示“站立”/“房间比例”)启用“就坐”模式:
setOpenVRTrackingOriginType(0)
默认模式是“房间比例”。
启用就坐跟踪原点类型时,跟踪原点不再是游戏区域的中心,而是位于游戏者的头部。这意味着,VRED 摄影机应位于 VR 场景中用户头部所在的位置。
将设置期间用户定义的特定姿势假定为默认头部姿势或“就坐零姿势”。跟踪值相对于该姿势传递。在 VRED 中运行 OpenVR 时,可以使用 Python 函数 resetOpenVRHMDPose()
重置“就坐零姿势”。
重要信息 每次启用 OpenVR 模式时,VRED 都会重置零姿势。
下面是使用 OpenVR 设置“就坐”模式的步骤。正确的顺序非常重要!
setOpenVRTrackingOriginType(0)
以激活“就坐”模式。resetOpenVRHMDPose()
。它在激活 OpenVR 时已重置;但是,如果用户当时在正确的位置未佩戴 HMD,则需要进行重置。