Initial Commit
This commit is contained in:
193
Assets/Oculus/VR/Scripts/OVRTracker.cs
Normal file
193
Assets/Oculus/VR/Scripts/OVRTracker.cs
Normal file
@@ -0,0 +1,193 @@
|
||||
/************************************************************************************
|
||||
Copyright : Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
|
||||
|
||||
Licensed under the Oculus Master SDK License Version 1.0 (the "License"); you may not use
|
||||
the Utilities 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
|
||||
https://developer.oculus.com/licenses/oculusmastersdk-1.0/
|
||||
|
||||
Unless required by applicable law or agreed to in writing, the Utilities 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 System;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// An infrared camera that tracks the position of a head-mounted display.
|
||||
/// </summary>
|
||||
public class OVRTracker
|
||||
{
|
||||
/// <summary>
|
||||
/// The (symmetric) visible area in front of the sensor.
|
||||
/// </summary>
|
||||
public struct Frustum
|
||||
{
|
||||
/// <summary>
|
||||
/// The sensor's minimum supported distance to the HMD.
|
||||
/// </summary>
|
||||
public float nearZ;
|
||||
/// <summary>
|
||||
/// The sensor's maximum supported distance to the HMD.
|
||||
/// </summary>
|
||||
public float farZ;
|
||||
/// <summary>
|
||||
/// The sensor's horizontal and vertical fields of view in degrees.
|
||||
/// </summary>
|
||||
public Vector2 fov;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If true, a sensor is attached to the system.
|
||||
/// </summary>
|
||||
public bool isPresent
|
||||
{
|
||||
get {
|
||||
if (!OVRManager.isHmdPresent)
|
||||
return false;
|
||||
|
||||
return OVRPlugin.positionSupported;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If true, the sensor is actively tracking the HMD's position. Otherwise the HMD may be temporarily occluded, the system may not support position tracking, etc.
|
||||
/// </summary>
|
||||
public bool isPositionTracked
|
||||
{
|
||||
get {
|
||||
return OVRPlugin.positionTracked;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If this is true and a sensor is available, the system will use position tracking when isPositionTracked is also true.
|
||||
/// </summary>
|
||||
public bool isEnabled
|
||||
{
|
||||
get {
|
||||
if (!OVRManager.isHmdPresent)
|
||||
return false;
|
||||
|
||||
return OVRPlugin.position;
|
||||
}
|
||||
|
||||
set {
|
||||
if (!OVRManager.isHmdPresent)
|
||||
return;
|
||||
|
||||
OVRPlugin.position = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the number of sensors currently connected to the system.
|
||||
/// </summary>
|
||||
public int count
|
||||
{
|
||||
get {
|
||||
int count = 0;
|
||||
|
||||
for (int i = 0; i < (int)OVRPlugin.Tracker.Count; ++i)
|
||||
{
|
||||
if (GetPresent(i))
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sensor's viewing frustum.
|
||||
/// </summary>
|
||||
public Frustum GetFrustum(int tracker = 0)
|
||||
{
|
||||
if (!OVRManager.isHmdPresent)
|
||||
return new Frustum();
|
||||
|
||||
return OVRPlugin.GetTrackerFrustum((OVRPlugin.Tracker)tracker).ToFrustum();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sensor's pose, relative to the head's pose at the time of the last pose recentering.
|
||||
/// </summary>
|
||||
public OVRPose GetPose(int tracker = 0)
|
||||
{
|
||||
if (!OVRManager.isHmdPresent)
|
||||
return OVRPose.identity;
|
||||
|
||||
OVRPose p;
|
||||
switch (tracker)
|
||||
{
|
||||
case 0:
|
||||
p = OVRPlugin.GetNodePose(OVRPlugin.Node.TrackerZero, OVRPlugin.Step.Render).ToOVRPose();
|
||||
break;
|
||||
case 1:
|
||||
p = OVRPlugin.GetNodePose(OVRPlugin.Node.TrackerOne, OVRPlugin.Step.Render).ToOVRPose();
|
||||
break;
|
||||
case 2:
|
||||
p = OVRPlugin.GetNodePose(OVRPlugin.Node.TrackerTwo, OVRPlugin.Step.Render).ToOVRPose();
|
||||
break;
|
||||
case 3:
|
||||
p = OVRPlugin.GetNodePose(OVRPlugin.Node.TrackerThree, OVRPlugin.Step.Render).ToOVRPose();
|
||||
break;
|
||||
default:
|
||||
return OVRPose.identity;
|
||||
}
|
||||
|
||||
return new OVRPose()
|
||||
{
|
||||
position = p.position,
|
||||
orientation = p.orientation * Quaternion.Euler(0, 180, 0)
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If true, the pose of the sensor is valid and is ready to be queried.
|
||||
/// </summary>
|
||||
public bool GetPoseValid(int tracker = 0)
|
||||
{
|
||||
if (!OVRManager.isHmdPresent)
|
||||
return false;
|
||||
|
||||
switch (tracker)
|
||||
{
|
||||
case 0:
|
||||
return OVRPlugin.GetNodePositionTracked(OVRPlugin.Node.TrackerZero);
|
||||
case 1:
|
||||
return OVRPlugin.GetNodePositionTracked(OVRPlugin.Node.TrackerOne);
|
||||
case 2:
|
||||
return OVRPlugin.GetNodePositionTracked(OVRPlugin.Node.TrackerTwo);
|
||||
case 3:
|
||||
return OVRPlugin.GetNodePositionTracked(OVRPlugin.Node.TrackerThree);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool GetPresent(int tracker = 0)
|
||||
{
|
||||
if (!OVRManager.isHmdPresent)
|
||||
return false;
|
||||
|
||||
switch (tracker)
|
||||
{
|
||||
case 0:
|
||||
return OVRPlugin.GetNodePresent(OVRPlugin.Node.TrackerZero);
|
||||
case 1:
|
||||
return OVRPlugin.GetNodePresent(OVRPlugin.Node.TrackerOne);
|
||||
case 2:
|
||||
return OVRPlugin.GetNodePresent(OVRPlugin.Node.TrackerTwo);
|
||||
case 3:
|
||||
return OVRPlugin.GetNodePresent(OVRPlugin.Node.TrackerThree);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user