private Matrix4x4 HMDMatrix4x4ToMatrix4x4(Valve.VR.HmdMatrix44_t hmdMatrix) { Matrix4x4 m = Matrix4x4.identity; m[0, 0] = hmdMatrix.m0; m[0, 1] = hmdMatrix.m1; m[0, 2] = hmdMatrix.m2; m[0, 3] = hmdMatrix.m3; m[1, 0] = hmdMatrix.m4; m[1, 1] = hmdMatrix.m5; m[1, 2] = hmdMatrix.m6; m[1, 3] = hmdMatrix.m7; m[2, 0] = hmdMatrix.m8; m[2, 1] = hmdMatrix.m9; m[2, 2] = hmdMatrix.m10; m[2, 3] = hmdMatrix.m11; m[3, 0] = hmdMatrix.m12; m[3, 1] = hmdMatrix.m13; m[3, 2] = hmdMatrix.m14; m[3, 3] = hmdMatrix.m15; return(m); }
/// <summary> /// Converts the HDM matrix to a 4x4 matrix (Credit to Railboy) /// </summary> /// <param name="input"></param> /// <returns></returns> protected Matrix4x4 HMDMatrix4x4ToMatrix4x4(Valve.VR.HmdMatrix44_t input) { var m = Matrix4x4.identity; m[0, 0] = input.m0; m[0, 1] = input.m1; m[0, 2] = input.m2; m[0, 3] = input.m3; m[1, 0] = input.m4; m[1, 1] = input.m5; m[1, 2] = input.m6; m[1, 3] = input.m7; m[2, 0] = input.m8; m[2, 1] = input.m9; m[2, 2] = input.m10; m[2, 3] = input.m11; m[3, 0] = input.m12; m[3, 1] = input.m13; m[3, 2] = input.m14; m[3, 3] = input.m15; return(m); }
// プロジェクションのスケールを取得する static Vector2 GetProjectionScale(SteamVR_TrackedCamera.VideoStreamTexture source) { Valve.VR.CVRTrackedCamera trackedCamera = Valve.VR.OpenVR.TrackedCamera; if (trackedCamera == null) { return(Vector2.one); } // スケール値を取得するだけなので、Near/Farの値は何でも構わない const float Near = 1.0f; const float Far = 100.0f; Valve.VR.HmdMatrix44_t ProjectionMatrix = new Valve.VR.HmdMatrix44_t(); if (trackedCamera.GetCameraProjection(source.deviceIndex, 0, source.frameType, Near, Far, ref ProjectionMatrix) != Valve.VR.EVRTrackedCameraError.None) { return(Vector2.one); } return(new Vector2(ProjectionMatrix.m0, ProjectionMatrix.m5)); }
static Matrix4x4 GetSteamVRProjectionMatrix(Camera cam, Valve.VR.EVREye eye) { Valve.VR.HmdMatrix44_t proj = SteamVR.instance.hmd.GetProjectionMatrix(eye, cam.nearClipPlane, cam.farClipPlane, SteamVR.instance.graphicsAPI); Matrix4x4 m = new Matrix4x4(); m.m00 = proj.m0; m.m01 = proj.m1; m.m02 = proj.m2; m.m03 = proj.m3; m.m10 = proj.m4; m.m11 = proj.m5; m.m12 = proj.m6; m.m13 = proj.m7; m.m20 = proj.m8; m.m21 = proj.m9; m.m22 = proj.m10; m.m23 = proj.m11; m.m30 = proj.m12; m.m31 = proj.m13; m.m32 = proj.m14; m.m33 = proj.m15; return(m); }