diff Orchestland/Assets/OVR/Scripts/OVRCommon.cs @ 1:f7675884f2a1

Add Orchestland project
author Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2015 23:09:20 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Orchestland/Assets/OVR/Scripts/OVRCommon.cs	Fri Jul 17 23:09:20 2015 +0900
@@ -0,0 +1,163 @@
+/************************************************************************************
+
+Copyright   :   Copyright 2014 Oculus VR, LLC. All Rights reserved.
+
+Licensed under the Oculus VR Rift SDK License Version 3.2 (the "License");
+you may not use the Oculus VR Rift SDK except in compliance with the License,
+which is provided at the time of installation or download, or which
+otherwise accompanies this software in either electronic or hard copy form.
+
+You may obtain a copy of the License at
+
+http://www.oculusvr.com/licenses/LICENSE-3.2
+
+Unless required by applicable law or agreed to in writing, the Oculus VR SDK
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+************************************************************************************/
+
+using UnityEngine;
+using System.Collections.Generic;
+using Ovr;
+
+/// <summary>
+/// Miscellaneous extension methods that any script can use.
+/// </summary>
+public static class OVRExtensions
+{
+	/// <summary>
+	/// Converts a plain C# matrix to a Unity matrix.
+	/// </summary>
+	/// <returns>The matrix as a Unity Matrix4x4.</returns>
+	/// <param name="ovrMat">The matrix as a Matrix4f.</param>
+	public static Matrix4x4 ToMatrix4x4(this Matrix4f ovrMat)
+	{
+        Matrix4x4 mat = new Matrix4x4();
+
+		mat[0, 0] = ovrMat.m[0, 0];
+		mat[0, 1] = ovrMat.m[0, 1];
+		mat[0, 2] = ovrMat.m[0, 2];
+		mat[0, 3] = ovrMat.m[0, 3];
+		mat[1, 0] = ovrMat.m[1, 0];
+		mat[1, 1] = ovrMat.m[1, 1];
+		mat[1, 2] = ovrMat.m[1, 2];
+		mat[1, 3] = ovrMat.m[1, 3];
+		mat[2, 0] = ovrMat.m[2, 0];
+		mat[2, 1] = ovrMat.m[2, 1];
+		mat[2, 2] = ovrMat.m[2, 2];
+		mat[2, 3] = ovrMat.m[2, 3];
+		mat[3, 0] = ovrMat.m[3, 0];
+		mat[3, 1] = ovrMat.m[3, 1];
+		mat[3, 2] = ovrMat.m[3, 2];
+		mat[3, 3] = ovrMat.m[3, 3];
+
+		return mat;
+	}
+
+	/// <summary>
+	/// Converts a plain C# Sizei to a Unity Vector2.
+	/// </summary>
+	/// <returns>The size as a Unity Vector2.</returns>
+	/// <param name="size">The size as a C# Sizei.</param>
+	public static Vector2 ToVector2(this Sizei size)
+	{
+		return new Vector2(size.w, size.h);
+	}
+
+	/// <summary>
+	/// Converts a plain C# Vector2i to a Unity Vector2.
+	/// </summary>
+	/// <returns>The vector as a Unity Vector2.</returns>
+	/// <param name="size">The vector as a C# Vector2i.</param>
+	public static Vector2 ToVector2(this Vector2i vec)
+	{
+		return new Vector2(vec.x, vec.y);
+	}
+
+	/// <summary>
+	/// Converts a plain C# Vector2 to a Unity Vector2.
+	/// </summary>
+	/// <returns>The vector as a Unity Vector2.</returns>
+	/// <param name="size">The vector as a C# Vector2.</param>
+	public static Vector2 ToVector2(this Vector2f vec)
+	{
+		return new Vector2(vec.x, vec.y);
+	}
+
+	/// <summary>
+	/// Converts a plain C# Vector3 to a Unity Vector3.
+	/// </summary>
+	/// <returns>The vector as a Unity Vector3.</returns>
+	/// <param name="size">The vector as a C# Vector3.</param>
+	public static Vector3 ToVector3(this Vector3f vec, bool rhToLh = true)
+	{
+		Vector3 v = new Vector3(vec.x, vec.y, vec.z);
+
+		if (rhToLh)
+			v.z = -v.z;
+
+		return v;
+	}
+	
+	/// <summary>
+	/// Converts a plain C# Quatf to a Unity Quaternion.
+	/// </summary>
+	/// <returns>The quaternion as a Unity Quaternion.</returns>
+	/// <param name="size">The quaternion as a C# Quatf.</param>
+	public static Quaternion ToQuaternion(this Quatf quat, bool rhToLh = true)
+	{
+		Quaternion q = new Quaternion(quat.x, quat.y, quat.z, quat.w);
+
+		if (rhToLh)
+		{
+			q.x = -q.x;
+			q.y = -q.y;
+		}
+
+		return q;
+	}
+
+	/// <summary>
+	/// Converts a plain C# Posef to a Unity OVRPose.
+	/// </summary>
+	/// <returns>The pose as a Unity OVRPose.</returns>
+	/// <param name="size">The pose as a C# Posef.</param>
+	public static OVRPose ToPose(this Posef pose, bool rhToLh = true)
+	{
+		return new OVRPose
+		{
+			position = pose.Position.ToVector3(rhToLh),
+			orientation = pose.Orientation.ToQuaternion(rhToLh)
+		};
+	}
+}
+
+/// <summary>
+/// An affine transformation built from a Unity position and orientation.
+/// </summary>
+public struct OVRPose
+{
+	/// <summary>
+	/// The position.
+	/// </summary>
+	public Vector3 position;
+
+	/// <summary>
+	/// The orientation.
+	/// </summary>
+	public Quaternion orientation;
+}
+
+/// <summary>
+/// Selects a human eye.
+/// </summary>
+public enum OVREye
+{
+	Center = -1,
+	Left  = Ovr.Eye.Left,
+	Right = Ovr.Eye.Right,
+	Count = Ovr.Eye.Count,
+}