如何从 OpenVR 的 TrackedDevicePose_t 计算偏移位置?

How do I calculate an offset position from OpenVR's TrackedDevicePose_t?

我正在使用 Vive 控制器进行 3D 数字化。我正在使用 OpenVR 与硬件对话,并使用 PollNextEventWithPose 在用户按下按钮时获取控制器的姿势。从姿势,我想计算一个点,它是我们的数字化点所在的 Z 轴上的 177mm。

运行 在 Unity 下,我做了这样的事情:

var digitizerPosition = trackedObject.transform.position - trackedObject.transform.forward * 0.177f;

现在在 OpenVR 下,PollNextEventWithPose 给了我一个 TrackedDevicePose_t,其中包含类型为 Valve.VR.HmdMatrix34_t 的字段 mDeviceToAbsoluteTracking。给定该矩阵,我如何计算沿 Z 轴的点?

等价于trackedObject.transform.forward是:

    public static Vector3D Forward(HmdMatrix34_t matrix)
    {
        return new Vector3D(matrix.m2, matrix.m6, matrix.m10);
    }