DLL Injection の記事はどうした!と言われそうですが、この後に書く予定です。許してください。
ということで、この記事では、 OpenVR SDK で SetOverlayTransformTrackedDeviceRelative
あと適用した座標についての絶対値をとる方法についてメモです。
といってもカンタンで、単純に渡した HmdMatrix34_t
を使えば取得できます。
例えばこんな感じで SetOverlayTransformTrackedDeviceRelative
したとしたら:
var baseMatrix = Matrix4x4.TRS(position, transform.rotation, transform.localScale); var matrix = new HmdMatrix34_t { m0 = baseMatrix.m00, m1 = baseMatrix.m01, m2 = baseMatrix.m02, m3 = baseMatrix.m03, m4 = baseMatrix.m10, m5 = baseMatrix.m11, m6 = baseMatrix.m12, m7 = baseMatrix.m13, m8 = baseMatrix.m20, m9 = baseMatrix.m21, m10 = baseMatrix.m22, m11 = baseMatrix.m23 }; var trackedDeviceIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(_attachedControllerRole); Overlay.SetOverlayTransformTrackedDeviceRelative(_handle, trackedDeviceIndex, ref matrix);
絶対値は:
var pTrackedDevicePoseArray = new TrackedDevicePose_t[OpenVR.k_unMaxTrackedDeviceCount]; OpenVR.System.GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin.TrackingUniverseStanding, 0f, pTrackedDevicePoseArray); var controller = pTrackedDevicePoseArray[trackedDeviceIndex]; var renderingPosition = controller.mDeviceToAbsoluteTracking.GetPosition() + matrix.GetPosition(); var renderingRotation = controller.mDeviceToAbsoluteTracking.GetRotation() * matrix.GetRotation();
それぞれ、 renderingPosition
と renderingRotation
の値が絶対値になります。
ということで、メモでした。