主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ
書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。
2022/06/16
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
の値が絶対値になります。
ということで、メモでした。