From 53966f92042d44483cb44f6c6b3c95a6a1fdd325 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 18 Jul 2015 03:50:02 +0200 Subject: Bug 1151 - Working OculusVR SDK 0.5.0.1 on GNU/Linux w/ Positional Tracker (DK2) Note: The ovrd server must run, otherwise no device is being detected. General Stereo API Changes: - EyePose -> ViewerPose - We only use the viewer pose and derive the pupile position via EyeParameter. - Hence we reduce complexity. - A single ViewerPose will be maintained by StereoDeviceRenderer - position is in meter, allowing StereoGLEventListener to scale device independent. - StereoDevice receives knowledge of certain sensors, to be queried and used for start-sensors. OVR: - Simply apply the above general changes - Build: Remove [more] unused API entries for SDK rendering --- .../com/jogamp/opengl/util/stereo/EyePose.java | 69 --------------- .../opengl/util/stereo/StereoClientRenderer.java | 7 +- .../jogamp/opengl/util/stereo/StereoDevice.java | 76 +++++++++++++++-- .../opengl/util/stereo/StereoDeviceRenderer.java | 22 ++--- .../opengl/util/stereo/StereoGLEventListener.java | 6 +- .../com/jogamp/opengl/util/stereo/StereoUtil.java | 41 +++++++-- .../com/jogamp/opengl/util/stereo/ViewerPose.java | 74 +++++++++++++++++ .../stereo/generic/GenericStereoDeviceConfig.java | 13 ++- .../stereo/generic/GenericStereoDeviceFactory.java | 3 + .../opengl/util/stereo/GenericStereoDevice.java | 56 ++++++++++--- .../util/stereo/GenericStereoDeviceRenderer.java | 46 +++++----- .../jogamp/opengl/oculusvr/OVRStereoDevice.java | 93 +++++++++++++++++---- .../opengl/oculusvr/OVRStereoDeviceFactory.java | 8 +- .../opengl/oculusvr/OVRStereoDeviceRenderer.java | 97 ++++++++++++---------- .../classes/jogamp/opengl/oculusvr/OVRUtil.java | 37 +++++++++ .../junit/jogl/acore/TestVersionSemanticsNOUI.java | 8 +- .../opengl/test/junit/jogl/demos/es2/GearsES2.java | 11 ++- .../junit/jogl/demos/es2/av/MovieSBSStereo.java | 14 ++-- .../test/junit/jogl/stereo/StereoDemo01.java | 8 +- 19 files changed, 478 insertions(+), 211 deletions(-) delete mode 100644 src/jogl/classes/com/jogamp/opengl/util/stereo/EyePose.java create mode 100644 src/jogl/classes/com/jogamp/opengl/util/stereo/ViewerPose.java (limited to 'src') diff --git a/src/jogl/classes/com/jogamp/opengl/util/stereo/EyePose.java b/src/jogl/classes/com/jogamp/opengl/util/stereo/EyePose.java deleted file mode 100644 index aa64ff130..000000000 --- a/src/jogl/classes/com/jogamp/opengl/util/stereo/EyePose.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright 2014 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.util.stereo; - -import com.jogamp.opengl.math.Quaternion; - -/** - * Position and orientation of one eye. - */ -public final class EyePose { - /** Eye number, 0 for the left eye and 1 for the right eye. */ - public final int number; - - /** float[3] eye position vector. */ - public final float[] position; - - /** Eye orientation */ - public final Quaternion orientation; - - public EyePose(final int number) { - this.number = number; - this.position = new float[3]; - this.orientation = new Quaternion(); - } - public EyePose(final int number, final float[] position, final Quaternion orientation) { - this(number); - set(position, orientation); - } - - /** Set position and orientation of this instance. */ - public final void set(final float[] position, final Quaternion orientation) { - System.arraycopy(position, 0, this.position, 0, 3); - this.orientation.set(orientation); - } - /** Set position and orientation of this instance. */ - public final void setPosition(final float posX, final float posY, final float posZ) { - position[0] = posX; - position[1] = posY; - position[2] = posZ; - } - public final String toString() { - return "EyePose[num "+number+", pos["+position[0]+", "+position[1]+", "+position[2]+"], "+orientation+"]"; - } -} \ No newline at end of file diff --git a/src/jogl/classes/com/jogamp/opengl/util/stereo/StereoClientRenderer.java b/src/jogl/classes/com/jogamp/opengl/util/stereo/StereoClientRenderer.java index b1a38ab06..8ecd8b8f7 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/stereo/StereoClientRenderer.java +++ b/src/jogl/classes/com/jogamp/opengl/util/stereo/StereoClientRenderer.java @@ -189,10 +189,7 @@ public class StereoClientRenderer implements GLEventListener { final int[] eyeOrder = deviceRenderer.getDevice().getEyeRenderOrder(); final int eyeCount = eyeOrder.length; - // Update eye pos upfront to have same (almost) results - for(int eyeNum=0; eyeNum + * Implementation shall {@link #stopSensors() stop sensors} and free all resources. + *

+ */ public void dispose(); /** @@ -96,12 +116,58 @@ public interface StereoDevice { */ public FovHVHalves[] getDefaultFOV(); - /** Start or stop sensors. Returns true if action was successful, otherwise false. */ - public boolean startSensors(boolean start); + /** + * Start desired and required sensors. Returns true if action was successful, otherwise false. + *

+ * Method fails if required sensors are not {@link #getSupportedSensorBits() supported}. + *

+ * @param desiredSensorBits the desired optional sensors + * @param requiredSensorBits the required sensors + * @see #stopSensors() + * @see #getSensorsStarted() + * @see #getSupportedSensorBits() + * @see #getEnabledSensorBits() + */ + public boolean startSensors(int desiredSensorBits, int requiredSensorBits); + + /** + * Stop sensors. Returns true if action was successful, otherwise false. + * @see #startSensors(int, int) + * @see #getSensorsStarted() + * @see #getSupportedSensorBits() + * @see #getEnabledSensorBits() + */ + public boolean stopSensors(); - /** Return true if sensors have been started, false otherwise */ + /** + * Return true if sensors have been started, false otherwise. + * @see #startSensors(int, int) + * @see #stopSensors() + * @see #getSupportedSensorBits() + * @see #getEnabledSensorBits() + */ public boolean getSensorsStarted(); + /** + * Returns the supported sensor capability bits, e.g. {@link #SENSOR_ORIENTATION}, {@link #SENSOR_POSITION} + * of the {@link StereoDevice}. + * @see #startSensors(int, int) + * @see #stopSensors() + * @see #getSensorsStarted() + * @see #getEnabledSensorBits() + */ + public int getSupportedSensorBits(); + + /** + * Returns the actual used sensor capability bits, e.g. {@link #SENSOR_ORIENTATION}, {@link #SENSOR_POSITION} + * in case the {@link #getSupportedSensorBits() device supports} them and if they are enabled. + * @see #startSensors(int, int) + * @see #stopSensors() + * @see #getSensorsStarted() + * @see #getSupportedSensorBits() + */ + public int getEnabledSensorBits(); + /** * Returns an array of the preferred eye rendering order. * The array length reflects the supported eye count. @@ -112,7 +178,7 @@ public interface StereoDevice { public int[] getEyeRenderOrder(); /** - * Returns the supported distortion compensation by the {@link StereoDeviceRenderer}, + * Returns the supported distortion compensation of the {@link StereoDeviceRenderer}, * e.g. {@link StereoDeviceRenderer#DISTORTION_BARREL}, {@link StereoDeviceRenderer#DISTORTION_CHROMATIC}, etc. * @see StereoDeviceRenderer#getDistortionBits() * @see #createRenderer(int, int, float[], FovHVHalves[], float, int) diff --git a/src/jogl/classes/com/jogamp/opengl/util/stereo/StereoDeviceRenderer.java b/src/jogl/classes/com/jogamp/opengl/util/stereo/StereoDeviceRenderer.java index 2078a00a2..0d6539634 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/stereo/StereoDeviceRenderer.java +++ b/src/jogl/classes/com/jogamp/opengl/util/stereo/StereoDeviceRenderer.java @@ -42,10 +42,10 @@ import com.jogamp.opengl.math.FovHVHalves; *