Jelajahi Sumber

OculusVR: Implement further tracking methods

Campbell Suter 8 tahun lalu
induk
melakukan
3082e63cfd
1 mengubah file dengan 21 tambahan dan 7 penghapusan
  1. 21 7
      jme3-vr/src/main/java/com/jme3/input/vr/OculusVR.java

+ 21 - 7
jme3-vr/src/main/java/com/jme3/input/vr/OculusVR.java

@@ -92,6 +92,16 @@ public class OculusVR implements VRAPI {
      */
     private final OVRPosef eyePosesPtr[] = new OVRPosef[2];
 
+    /**
+     * The eye positions relative to the world, as used by jME.
+     */
+    private final Vector3f eyePositions[] = new Vector3f[2];
+
+    /**
+     * The position and orientation of the user's head.
+     */
+    private OVRPosef headPose;
+
     // The size of the texture drawn onto the HMD
     private int textureW;
     private int textureH;
@@ -229,6 +239,7 @@ public class OculusVR implements VRAPI {
             jPose.setRotationQuaternion(quatO2J(pose.Orientation(), new Quaternion()));
 
             eyePoses[eye] = jPose;
+            eyePositions[eye] = new Vector3f(); // Set the absolute position up for later.
         }
 
         // step 7 - recenter
@@ -246,7 +257,7 @@ public class OculusVR implements VRAPI {
         ovr_GetTrackingState(session, ftiming, true, hmdState);
 
         //get head pose
-        OVRPosef headPose = hmdState.HeadPose().ThePose();
+        headPose = hmdState.HeadPose().ThePose();
         hmdState.free();
 
         //build view offsets struct
@@ -261,7 +272,9 @@ public class OculusVR implements VRAPI {
         eyePosesPtr[ovrEye_Left] = outEyePoses.get(0);
         eyePosesPtr[ovrEye_Right] = outEyePoses.get(1);
 
-        // TODO
+        for (int i = 0; i < eyePosesPtr.length; i++) {
+            vecO2J(eyePosesPtr[i].Position(), eyePositions[i]);
+        }
     }
 
     @Override
@@ -317,17 +330,18 @@ public class OculusVR implements VRAPI {
 
     @Override
     public Quaternion getOrientation() {
-        throw new UnsupportedOperationException();
+        return quatO2J(headPose.Orientation(), new Quaternion());
     }
 
     @Override
     public Vector3f getPosition() {
-        throw new UnsupportedOperationException();
+        return vecO2J(headPose.Position(), new Vector3f());
     }
 
     @Override
     public void getPositionAndOrientation(Vector3f storePos, Quaternion storeRot) {
-        throw new UnsupportedOperationException();
+        vecO2J(headPose.Position(), storePos);
+        quatO2J(headPose.Orientation(), storeRot);
     }
 
     @Override
@@ -342,12 +356,12 @@ public class OculusVR implements VRAPI {
 
     @Override
     public Vector3f getHMDVectorPoseLeftEye() {
-        throw new UnsupportedOperationException();
+        return eyePositions[ovrEye_Left];
     }
 
     @Override
     public Vector3f getHMDVectorPoseRightEye() {
-        throw new UnsupportedOperationException();
+        return eyePositions[ovrEye_Right];
     }
 
     @Override