28package com.jogamp.opengl.util.stereo.generic;
30import jogamp.opengl.util.stereo.DistortionMesh;
31import jogamp.opengl.util.stereo.GenericStereoDevice;
33import com.jogamp.common.util.ReflectionUtil;
34import com.jogamp.math.FloatUtil;
35import com.jogamp.math.FovHVHalves;
36import com.jogamp.math.Vec3f;
37import com.jogamp.nativewindow.util.Dimension;
38import com.jogamp.nativewindow.util.DimensionImmutable;
39import com.jogamp.opengl.util.stereo.EyeParameter;
40import com.jogamp.opengl.util.stereo.StereoDevice;
41import com.jogamp.opengl.util.stereo.StereoDeviceConfig;
42import com.jogamp.opengl.util.stereo.StereoDeviceFactory;
43import com.jogamp.opengl.util.stereo.StereoDeviceRenderer;
44import com.jogamp.opengl.util.stereo.StereoUtil;
57 final Vec3f defaultEyePositionOffset) {
58 final float pupilCenterFromScreenTopInMeters = screenSizeInMeters[1] / 2f;
59 final float d2r = FloatUtil.PI / 180.0f;
66 pupilCenterFromScreenTopInMeters,
70 new EyeParameter(0, defaultEyePositionOffset,
72 FovHVHalves.byFovyRadianAndAspect(45f*d2r, 1280f / 800f),
93 final float interpupillaryDistanceInMeters,
final float fovy,
94 final Vec3f defaultEyePositionOffset) {
95 final float pupilCenterFromScreenTopInMeters = screenSizeInMeters[1] / 2f;
96 final float d2r = FloatUtil.PI / 180.0f;
101 final float aspect = (float)eyeTextureSize.
getWidth() / (float)eyeTextureSize.
getHeight();
111 pupilCenterFromScreenTopInMeters,
112 interpupillaryDistanceInMeters,
115 new EyeParameter(0, defaultEyePositionOffset, defaultSBSEyeFovLeft,
116 interpupillaryDistanceInMeters/2f , 0f , 0.010f ),
117 new EyeParameter(1, defaultEyePositionOffset, defaultSBSEyeFovRight,
118 -interpupillaryDistanceInMeters/2f , 0f , 0.010f ) },
140 final float interpupillaryDistanceInMeters,
final float fovy,
142 final Vec3f defaultEyePositionOffset) {
143 DistortionMesh.Producer lenseDistMeshProduce =
null;
145 lenseDistMeshProduce =
146 (DistortionMesh.Producer)
147 ReflectionUtil.createInstance(
"jogamp.opengl.oculusvr.stereo.lense.DistortionMeshProducer", GenericStereoDevice.class.getClassLoader());
148 }
catch (
final Throwable t) {
149 if(
StereoDevice.
DEBUG) { System.err.println(
"Caught: "+t.getMessage()); t.printStackTrace(); }
151 if(
null == lenseDistMeshProduce ) {
154 final float pupilCenterFromScreenTopInMeters = screenSizeInMeters[1] / 2f;
155 final float d2r = FloatUtil.PI / 180.0f;
159 final float aspect = (float)eyeTextureSize.
getWidth() / (float)eyeTextureSize.
getHeight();
169 pupilCenterFromScreenTopInMeters,
170 interpupillaryDistanceInMeters,
173 new EyeParameter(0, defaultEyePositionOffset, defaultSBSEyeFovLeft,
174 interpupillaryDistanceInMeters/2f , 0f , 0.010f ),
175 new EyeParameter(1, defaultEyePositionOffset, defaultSBSEyeFovRight,
176 -interpupillaryDistanceInMeters/2f , 0f , 0.010f ) },
178 lenseDistMeshProduce,
195 return new GenericStereoDevice(
this, deviceIndex, config);
198 private boolean isValid =
true;
Horizontal and vertical field of view (FOV) halves, allowing a non-centered projection.
static FovHVHalves byFovyRadianAndAspect(final float verticalFov, final float aspect)
Returns a symmetrical centered FovHVHalves instance in inTangents, using:
3D Vector based upon three float components.
Constant single eye parameter of the viewer, relative to its ViewerPose.
Merely a class providing a type-tag for extended configuration.
Platform agnostic StereoDevice factory.
static float[] getHorizPupilCenterFromLeft(final float screenWidthInMeters, final float interpupillaryDistanceInMeters)
Return the horizontal pupil center from the left side for both eyes in the range [0....
static float getVertPupilCenterFromTop(final float screenHeightInMeters, final float pupilCenterFromScreenTopInMeters)
Return the vertical pupil center from the screen top in the range [0..1].
Configuration for GenericStereoDevices.
static GenericStereoDeviceConfig createStereoSBSLense(final String name, final DimensionImmutable surfaceSizeInPixel, final float[] screenSizeInMeters, final float interpupillaryDistanceInMeters, final float fovy, final DimensionImmutable eyeTextureSize, final Vec3f defaultEyePositionOffset)
Create a generic lense distorted side-by-side stereoscopic generic device config.
final StereoDevice createDeviceImpl(final int deviceIndex, final StereoDeviceConfig config, final boolean verbose)
static GenericStereoDeviceConfig createMono(final String name, final DimensionImmutable surfaceSizeInPixel, final float[] screenSizeInMeters, final Vec3f defaultEyePositionOffset)
Create a generic monoscopic generic device config.
boolean isValid()
Returns true, if instance is created and not shutdown() otherwise returns false.
static GenericStereoDeviceConfig createStereoSBS(final String name, final DimensionImmutable surfaceSizeInPixel, final float[] screenSizeInMeters, final float interpupillaryDistanceInMeters, final float fovy, final Vec3f defaultEyePositionOffset)
Create a generic homogenous side-by-side stereoscopic generic device config.
final void shutdown()
Shutdown factory if valid.
static boolean isAvailable()
Immutable Dimension Interface, consisting of it's read only components:
Stereoscopic device rendering interface.
static final int DISTORTION_BARREL
Distortion Bit: Barrel distortion compensating lens pincushion distortion.
static final int DISTORTION_CHROMATIC
Distortion Bit: Chromatic distortion compensating lens chromatic aberration.
static final int DISTORTION_VIGNETTE
Distortion Bit: Vignette distortion compensating lens chromatic aberration.
Interface describing a native stereoscopic device.
static final boolean DEBUG