OculusVR: Implement further tracking methods

empirephoenix-patch-1
Campbell Suter 7 years ago
parent 601ba1cfda
commit 3082e63cfd
No known key found for this signature in database
GPG Key ID: 754A66CCF3F73C0F
  1. 28
      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]; 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 // The size of the texture drawn onto the HMD
private int textureW; private int textureW;
private int textureH; private int textureH;
@ -229,6 +239,7 @@ public class OculusVR implements VRAPI {
jPose.setRotationQuaternion(quatO2J(pose.Orientation(), new Quaternion())); jPose.setRotationQuaternion(quatO2J(pose.Orientation(), new Quaternion()));
eyePoses[eye] = jPose; eyePoses[eye] = jPose;
eyePositions[eye] = new Vector3f(); // Set the absolute position up for later.
} }
// step 7 - recenter // step 7 - recenter
@ -246,7 +257,7 @@ public class OculusVR implements VRAPI {
ovr_GetTrackingState(session, ftiming, true, hmdState); ovr_GetTrackingState(session, ftiming, true, hmdState);
//get head pose //get head pose
OVRPosef headPose = hmdState.HeadPose().ThePose(); headPose = hmdState.HeadPose().ThePose();
hmdState.free(); hmdState.free();
//build view offsets struct //build view offsets struct
@ -261,7 +272,9 @@ public class OculusVR implements VRAPI {
eyePosesPtr[ovrEye_Left] = outEyePoses.get(0); eyePosesPtr[ovrEye_Left] = outEyePoses.get(0);
eyePosesPtr[ovrEye_Right] = outEyePoses.get(1); eyePosesPtr[ovrEye_Right] = outEyePoses.get(1);
// TODO for (int i = 0; i < eyePosesPtr.length; i++) {
vecO2J(eyePosesPtr[i].Position(), eyePositions[i]);
}
} }
@Override @Override
@ -317,17 +330,18 @@ public class OculusVR implements VRAPI {
@Override @Override
public Quaternion getOrientation() { public Quaternion getOrientation() {
throw new UnsupportedOperationException(); return quatO2J(headPose.Orientation(), new Quaternion());
} }
@Override @Override
public Vector3f getPosition() { public Vector3f getPosition() {
throw new UnsupportedOperationException(); return vecO2J(headPose.Position(), new Vector3f());
} }
@Override @Override
public void getPositionAndOrientation(Vector3f storePos, Quaternion storeRot) { public void getPositionAndOrientation(Vector3f storePos, Quaternion storeRot) {
throw new UnsupportedOperationException(); vecO2J(headPose.Position(), storePos);
quatO2J(headPose.Orientation(), storeRot);
} }
@Override @Override
@ -342,12 +356,12 @@ public class OculusVR implements VRAPI {
@Override @Override
public Vector3f getHMDVectorPoseLeftEye() { public Vector3f getHMDVectorPoseLeftEye() {
throw new UnsupportedOperationException(); return eyePositions[ovrEye_Left];
} }
@Override @Override
public Vector3f getHMDVectorPoseRightEye() { public Vector3f getHMDVectorPoseRightEye() {
throw new UnsupportedOperationException(); return eyePositions[ovrEye_Right];
} }
@Override @Override

Loading…
Cancel
Save