XRInputSource: gripSpace 属性
只读的 XRInputSource 属性 gripSpace 返回一个 XRSpace 对象,其本地原点跟踪用于渲染虚拟对象的姿势,以便它们看起来被用户的手握住(或成为手的一部分)。例如,如果用户正握着一根虚拟的直杆,此 XRSpace 的本地原点将位于用户拳头的大约质心处。
值
一个 XRSpace 对象,表示输入设备在虚拟空间中的位置和方向,适合在场景中渲染设备的图像。如果输入源本身不可跟踪,则 gripSpace 为 null。例如,只有 targetRayMode 为 tracked-pointer 的输入才提供 gripSpace。
想象一下控制器形状像一根直杆,被用户握在拳头里。手握空间的本地原点位于用户拳头的质心(重心),跟踪用户手的位置。
左手手握空间的坐标系。
右手手握空间的坐标系。
如上图所示,坐标系的方向如下:
- X 轴垂直于用户的手掌,如果控制器在用户右手,则方向从手背向外延伸为 +X;如果控制器在用户左手,则方向为 -X。
- Z 轴沿杆的长度方向,平行于用户的手掌并沿握持的长度方向。-Z 指向用户拇指的方向,+Z 指向相反方向。
- Y 轴由另外两个轴之间的关系隐含;就像总是那样,它是另外两个轴的叉积(与 X 轴和 Z 轴都相距 90°)。
示例
在这个从帧渲染回调中提取的例子中,gripSpace 用于渲染一个表示控制器在虚拟环境中的位置和方向的网格。
js
for (const source in xrSession.inputSources) {
if (source.gripSpace) {
const gripPose = frame.getPose(source.gripSpace, xrRefSpace);
if (gripPose) {
myDrawMeshUsingTransform(controllerMesh, gripPose.transform.matrix);
}
}
}
对于具有 gripSpace 值的每个输入源,此循环会获取表示 gripSpace 所描述的位置和方向的 XRPose。如果返回有效的姿势,则调用 myDrawMeshUsingTransform() 方法以使用手握姿势的变换矩阵来绘制控制器网格。
规范
| 规范 |
|---|
| WebXR Device API # dom-xrinputsource-gripspace |
浏览器兼容性
加载中…