diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/OculusVR.java b/jme3-vr/src/main/java/com/jme3/input/vr/OculusVR.java index 3ba52e481..ebb080bb6 100644 --- a/jme3-vr/src/main/java/com/jme3/input/vr/OculusVR.java +++ b/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