-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature openxr #2012
base: master
Are you sure you want to change the base?
Feature openxr #2012
Conversation
Include openxr instead openvr.
Clean vr-code for replacing. Code cleanup.
After a long period of try and error a working solution was found.
jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVR.java
Outdated
Show resolved
Hide resolved
New PullRequest as suggested in jMonkeyEngine#2012
New PullRequest as suggested in #2012 Co-authored-by: Starcommander <starcommander@gmx.at>
Given JME's staffing constraints, I worry about adding to the project's maintenance burden.
|
@stephengold When we have openvr included in jme3-vr (that needs steam binary blob "steamvr"), then why not openxr that is open source, and should be the successor of openvr? |
I think it would be a great contribution to add openxr. At the same time I share @stephengold 's concerns. The vr package hasn't had a proper maintainer since 2015 and has relied on sporadic contributions since. I wonder if it would make sense to break it put of core to a separate project. It could still reside in the jme project, but not alongside the core packages. That way, updating it would be a little less sensitive. Commenting on the pr itself, I think proper hmd translation and controller support would be minimum requirements for it to be considered. Otherwise the use case is very limited. |
Integrating OpenXR to JMonkey is a good idea for me. However, i've some concerns regarding the proposed method:
|
Very cool, I will take a look at this PR properly on Friday (and can test on an occulus quest). But I would vote yes to having openXR be an engine feature rather than a seperate library. It's a fundamental capability like android launch that might then have libraries build around it to produce advanced functionality. I'm also pro this being seperate from the existing VR stuff because that was written in a very different time where there were many competing standards that needed to be abstracted over |
From a quick look at this PR (in the gradle build), I do not see how the |
Damn. I thought I saw it was when I checked on my phone last night. Disregard that part. |
@Ali-RS Yes, you are right, jme3-vr is not necessary to launch an app with jme3-xr. |
If we do want it in a seperate library I'd be happy to have it in Tamarin (as a Tamarin 2 that is only openXR and Tamarin 1 keeping legacy support for openVR) and then I'd maintain it |
I've been working on actions and am making a fair bit of progress. Have got basic button presses registered and working (I mention this to avoid us duplicating work). I have no idea why I'm getting the weird lensing effects when I turn my head and have given up trying to understand why (at least for now) |
Could you please convert this PR to a "draft"? |
Yes, when I am back on Friday I will switch to draft. |
@richardTingle |
@Starcommander yes, actions are going well, I have basic button presses and haptics working. Getting hand skeletons and hand poses working next; then I'll try to get tamarin's bound hands and grab interactions working with it. I much prefer openXR's approach to actions; suggested bindings specified in code, rather than openVRs manifest file that must be specified by an absolute path. I found a method to get openXR to suggest eye positions and angles which is what I used in that hmd change. On camera stuff I'm much less good, are you happy to tackle that? I couldn't get to the bottom of the lensing effects I was seeing. Do you see that too? That if you look directly at something it's in the right place but as you move your head it seems to move. I'm fairly relaxed on it being a jme3-xr or incorporated into Tamarin (im less keen on a non Tamarin non jme library but thats just me being selfish as Tamarin is my library so if other people want that I'll go with the flow). 2024 does sound like a long time to wait though; that said an OpenVr to OpenXR migration looks like it would be quite easy for existing projects. I will at the very least want to keep the more opinionated bound hand, grab and lemur support within Tamarin. |
* Android: Implemented AndroidNativeBufferAllocator - Deprecated AndroidBufferAllocator (jMonkeyEngine#1821) * [skip ci] update natives snapshot * Add GL debug capabilities (jMonkeyEngine#1790) * Add GL debug capabilities * Fix: check for null names * Add java types to VarType and type checks to MatParam (jMonkeyEngine#1797) * SettingsDialog: Fixed LAF * SettingsDialog: Updated jme3 copyright * README.md: add a link to Chatter Games website * Update README.md to include Exotic Matter (jMonkeyEngine#1838) Would be great to have our game Exotic Matter also mentioned as its engine is based on jME. Thanks! * jme3-examples: update the fallback URLs for "TerrainGridTestData.zip" * Improved code readability: ParticlePointMesh and ParticleTriMesh (jMonkeyEngine#1831) * jme3-core: add tests for Transform.toString() * Fix issue jMonkeyEngine#1839 (Memory Leak in DefaultLightFilter) Co-authored-by: Lukas Habring <lukas@Lukas-PC> * Added getter & setter for FilterPostProcessor.depthFormat (jMonkeyEngine#1841) * Added setter for FilterPostProcessor.depthFormat * Added getter for FilterPostProcessor.depthFormat * update the Gradle wrapper to v7.5.1 * main.yml: GitHub Action's ubuntu-18.04 environment is deprecated * bugfix: mergedJavadoc task is incompatible with Gradle v7 * main.yml: udate "actions/setup-java" to v3 * main.yml: add JDK 17 tests * build.gradle: update gradleVersion in case user runs the "wrapper" task * Fix jMonkeyEngine#1843 (java.util.zip.ZipException in HttpZipLocator) (jMonkeyEngine#1842) * HttpZipLocator:fix invalid code lengths set & invalid distance too far back ZipExceptions. * Get file name length and extra field length from local file header to calculate file data offset. * Make fields `byteBuf`, `charBuf`, `utf8Decoder` non-static because they are not thread-safe. * Surround streams with try-with-resources block. * Clean up the display modes parsing * No need to separately test for the contains * README.md: SDK v3.4 has been released * Some enhancement to new animation system (jMonkeyEngine#1845) * Some enhancement to new animation system, including: * Option to enable/disable animation mask propagation to child actions. * Option to control max transition weight. For example useful for controlling smooth animation transition when an animation is removed from an upper layer. * Added animation loop support in AnimLayer. * AnimLayer can now also keep action name, so one can easily lookup currently playing action name in an specific layer. * Minor Javadoc fix. * AnimLayer: clear `currentActionName` inside `cloneFields` method. * Added a Loop tween to Tweens factory class (jMonkeyEngine#1846) * Added a Loop tween to Tweens factory class. Supports looping by count or duration. * Redesigned the Loop tween to work similar to Sequence tween. Now fast forwarding the loop will also try to catch up the loops left behind making sure they always see their 'length'. * Added the missing Override annotation. * Added Tweens.cycle() and Tweens.invert() methods (jMonkeyEngine#1849) Cycle is used for running delegate tween back and force and Invert is used to run delegate tween backward. * BlendAction: resolve slow-motion side effect caused by stretching actions (jMonkeyEngine#1848) * BlendAction: resolve slow motion side effect caused by stretching any action that doesn't have the same length. It generates speed factor for each child animation that are dynamically interpolated and applied to base speed based on the blend weight taken from blend space. * Add missing javadoc. * Add Copyright. * Renamed calculateSpeedFactors() to applyDefaultSpeedFactors() and made it non static. * Fix issue jMonkeyEngine#1850 (JmeSystem.writeImageFile() throw java.nio.BufferUnderflowException) (jMonkeyEngine#1851) * jme3-jogg: upgrade the j-ogg-all library to v1.0.2 * jMonkeyEngine#1569 Fix license file to be better detected by GitHub (jMonkeyEngine#1855) * jme3-plugins: update the "gson" library to v2.9.1 * workflows/main.yml: update the "checkout" action to v3 * fix: broken link in README.md (jMonkeyEngine#1858) Signed-off-by: Kasper Aaquist Johansen <kasperaaquist@gmail.com> Signed-off-by: Kasper Aaquist Johansen <kasperaaquist@gmail.com> * workflows/main.yml: update wrapper-validation-action to v1.0.5 * update wrapper-validation-action to v1.0.5 (one more place) * README.md: SDK v3.5.2 has now been published * Quaternion: javadoc * Add instance culling function in InstancedGeometry (jMonkeyEngine#1865) * Added a workaround to prevent shadow disappearing on instanced geometries away from camera by introducing an instance culling function on InstancedGeometry. There also is a default implementation provided. * Removed the bound-scale hack for shadow disappearing issue from DefaultInstanceCullingFunction. The “right” solution is to have it pay attention to the frustums of whatever shadow-casting lights are around… but anyway developers now can implement their own frustum culling however they like or even "unset" it to disable instance culling which should also resolve the shadow issue. * Remove unused imports. * Fix: make the stencil test functions usable. (jMonkeyEngine#1866) * Fix: make the stencil test functions usable. * Fix: formatting * Fix: formatting * Fix: formatting * Fix: copyright year * upgrade to Gradle v7.6 (for its Java 19 support) * Read shorts properly * More efficient logging * Read unsigned byte properly * Remove unnecessary byte and call the variable c as in the formulas * move SettingsDialog and ErrorDialog to new jme3-awt-dialogs module (jMonkeyEngine#1876) * Refactory Settings/Error dialogs in JmeDialogsFactory and jme3-awt-dialogs * add build.gradle * Add copyright headers * Fix formatting and documentation Co-authored-by: riccardobl <riccardo0blb@gmail.com> * JmeSurfaceView: Package migration (jMonkeyEngine#1819) * JmeSurfaceView: migration to new package (com.jme3.view.surfaceview) * JmeSurfaceView: migration to new package (com.jme3.view.surfaceview) * upgrade the groovy-test library to v3.0.13 * jme3-core: correct/clarify javadoc * Implementation of a glTF extension loader for KHR_texture_transform (jMonkeyEngine#1869) * Implementation of a glTF extension loader for KHR_texture_transform * Thread-safe version of the glTF extension loader for KHR_texture_transform * Updated thread-safe version of the glTF extension loader for KHR_texture_transform * Fix (switched indices of the translation matrix): thread-safe version of the glTF extension loader for KHR_texture_transform * Added support for texCoord, fixed matrix comparison * Simplified matrix comparison, removed trailing whitespaces * Update to differentiate transformations applied to different UV sets * Improved memory usage for transformMap * Specified Map generic types & removed unnecessary cast Co-authored-by: Manuel <Manuel@DESKTOP-6RJH3UF> * jme3-core: test the com.jme3.math.Triangle class * bugfix: Mesh.getTriangle() may yield an incorrect centroid * Fix jMonkeyEngine#1867 (LightFilter gets applied even if not needed) (jMonkeyEngine#1872) * Add NullLightFilter.java * Add usage of null light filter when rendering shadowmaps * Fix formatting * Make static NullLightFilter final * Fix formatting and author * BlendableAction: Fix JavaDoc for setMaxTransitionWeight & replace assert with IllegalArgumentException (jMonkeyEngine#1881) * Fix jMonkeyEngine#1412 (GltfLoader does not support AO packed in MetallicRoughnessMap) (jMonkeyEngine#1880) * Fix jMonkeyEngine#1882 (J3MLoader always generates mips ignoring MinFilter) (jMonkeyEngine#1884) * Get texture mips generation flag from MinFilter specified in j3m file. * Update copyright date. * Fix J3MLoaderTest failing. * Fix TestMaterialWrite failing. * Update copyright date. * Use Trilinear if no min filter is specified in j3m file. * Add copyright note in J3MOutputCapsule. * Fix J3MLoaderTest failing. * Made extension loaders non-static to avoid concurrency issues (jMonkeyEngine#1886) Now each GltfLoader instantiated via ThreadLocal will have its own instances of extension loaders. * Fix jMonkeyEngine#1883 (Image class wrongly setting GL mips flags inside the constructor) (jMonkeyEngine#1885) * AreaUtils: Migrated package to `com.jme3.util` (jMonkeyEngine#1826) * AreaUtils: Migrated package to `com.jme3.util` * com.jme3.uitl.AreaUtils: removed code duplicates - added `final` class specifier * com.jme3.util.AreaUtils: fixed duplication build error * utils/AreaUtils.java: full migration to the utility package * scene/control/AreaUtils.java: removed utility methods - delegated functionality to `jme3.utils.AreaUtils` * scene/AreaUtils: fixed `jme3.util` package linking typo * Renderer: javadoc correction * update the groovy-test library to v3.0.14 * LICENSE.md: add 2023 to copyright years * Fix jMonkeyEngine#1892 (TestChooser does not show classes list when run with java 8) (jMonkeyEngine#1893) * TestChooser:fix class list not showing when run with java 8. * Update copyright date. * main.yml: use "temurin" openjdk. Fix jMonkeyEngine#1896 (jMonkeyEngine#1897) * README.md: add Demon Lord to the list of published games * Fix jMonkeyEngine#1773 (Wrong particle position when `worldSpace` flag equals to true) (jMonkeyEngine#1889) * Add test case for issue jMonkeyEngine#1773. * Fix wrong particle position when using 'EmitterMeshVertexShape' or 'EmitterMeshFaceShape' and worldSpace flag equal to true. The old code was interpolating particles position toward emitter world position and this was only working fine for EmitterPointShape and in the other shapes this was causing particles not keep the shape because they were being dragged toward emitter position. The new code calculates the distance vector from emitter last location to the current emitter location and subtracts it from particles position to generate a hypothetical position that is used for interpolation. * Add javadoc to TestIssue1773. * Minor javadoc fix. * jme3-niftygui: solve issue jMonkeyEngine#1891 (incorrect fullscreen layout) (jMonkeyEngine#1895) * jme3-lwjgl:updated to lwjgl v2.9.4 hosted by org.jmonkeyengine. Fix jMonkeyEngine#1247, jMonkeyEngine#1215, jMonkeyEngine#947 (jMonkeyEngine#1902) * Fix jMonkeyEngine#1890 (crashes attempting to run example apps in fullscreen with LWJGL v2) (jMonkeyEngine#1898) * jme3-lwjgl:fallback to standard 60Hz fullscreen display mode if the specified frequency in the AppSettings is not available and log a warning. * Fallback to whatever bps or frequency is available. Added a wild-card value to let selecting any bps or frequency available by passing -1. * Support AWT display frequency model. Looks like AWT uses mathematics round to convert float frequency values to int while lwjgl 2 uses mathematics floor. For example if frequency is 59.83, AWT will return 60 but lwjgl 2 will return 59. * Remove redundant check. * Added documentation for getFullscreenDisplayMode method. * When in VR attach the debug scene to the two eye's scenes. Fix#1795 (jMonkeyEngine#1888) * jMonkeyEngine#1795 When in VR attach the debug scene to the two eye's scenes This ensures they show up correctly * jMonkeyEngine#1795 Whitespace corrections * jMonkeyEngine#1795 Further whitespace corrections * jMonkeyEngine#1795 Yet more whitespace corrections * jMonkeyEngine#1795 Add explanatory comment as to why VR and non-VR have totally different approaches * Refactored PBR Terrain to use new for-loops. Fix jMonkeyEngine#1785 (jMonkeyEngine#1901) Drastically reduced code by utilizing JME's new potential for define-compatible for-loops in shaders. Also cleaned up some other little things like indentations, comments, and code placement so that the code is much more organized and easier to understand. * add the Spatial.addControlAt() method (jMonkeyEngine#1899) * JmeContext: add a getSystemListener() method (jMonkeyEngine#1894) * jme3-examples: add tests for issue jMonkeyEngine#1903 * Refactored Advanced PBR Terrain to use new for-loops (jMonkeyEngine#1904) * Refactored Advanced PBR Terrain to use new for-loops Similar to my recent pull request doing the same for the base PbrTerrain shader (jMonkeyEngine#1901) this PR also adds for-loop support to the advanced version of the pbr shader that uses texture arrays * Update PBRTerrain.frag * Update AdvancedPBRTerrain.frag * Update AfflictionLib.glsllib (jMonkeyEngine#1905) This PR goes along with my last PR cleaning up the AdvancedPBRTerrain.j3md shader. The method getTriPlanarBlendFromTexArray() was put into this glsllib that contains all of the other commonly used functions for the pbr terrain shaders. * common.gradle: set class files compatible with Java 8 using "release" option (jMonkeyEngine#1907) * common.gradle: set class files compatible with Java 8. This will keep java 8 compatibility when it is compiled with newer java versions. * Merge with existing block. * Reformat code. * common.gradle: add "Created-By" jar manifest to show Java version and vendor name (jMonkeyEngine#1913) * common.gradle: add Created-By in jar manifest to show java version used to create the jar. * Also add vendor name. * ParticleEmitter: improve code readability. Apply the DRY principle (jMonkeyEngine#1912) * add 4 getters to JmeContext for screen position and frame-buffer size (jMonkeyEngine#1911) * test and fix for jMonkeyEngine#1909 (NPE while generating tangents) (jMonkeyEngine#1910) * add a JUnit test for issue 1909 (NPE while generating tangents) * solve issue jMonkeyEngine#1909 (NPE while generating tangents) * jme3-lwjgl: bump to lwjgl 2.9.5 (jMonkeyEngine#1914) * Fix jMonkeyEngine#1917 (RendererException in ScreenshotAppState: Attempting to upload empty buffer) (jMonkeyEngine#1918) * PBRLighting: fix comment describing packed MetallicRoughnessMap (jMonkeyEngine#1921) Updated a comment about the MetallicRoughness map that previously said the Red channel is unused - changed to instead say that the red channel of MR map stores the AO value if AoPackedInMRMap is true. * solve issue jMonkeyEngine#1919 (underflow while generating tangents) (jMonkeyEngine#1920) * jme-core: add a test for issue jMonkeyEngine#1919 (underflow generating tangents) * MikktspaceTangentGenerator: solve jMonkeyEngine#1919 (underflow generating tangents) * main.yml: deploy with jdk17 (jMonkeyEngine#1922) * Fix jMonkeyEngine#1923 (OSSRH artifacts are build with different java version) (jMonkeyEngine#1924) * main.yml: build on pushes to the new v3.6 branch * gradle.properties: next release from "master" branch should be v3.7.0 * resolve issue jMonkeyEngine#1926 (unnecessary dependencies) (jMonkeyEngine#1927) * buildscript: move def of "niftyVersion" to "common.gradle" (shared between projects) * jme3-testdata: rm dependency on "nifty-style-black" (redundant with "jme3-niftygui") * buildscript: mv "nifty-examples" dependency from "jme3-testdata" to "jme3-examples" * solve issue jMonkeyEngine#1928 (OutOfMemoryError in FBX importer) (jMonkeyEngine#1929) * solve issue jMonkeyEngine#1928 (OutOfMemoryError in FBX importer) * tweak the new javadoc * solve issue jMonkeyEngine#1930 (NPE in FbxLayerElement) (jMonkeyEngine#1931) * solve issue jMonkeyEngine#1932 (class cast exceptions in FBX importer) (jMonkeyEngine#1934) * solve issue jMonkeyEngine#1933 (unsupported operation in FbxNode) (jMonkeyEngine#1936) * solve issue jMonkeyEngine#1937 (NPE in FbxObject) (jMonkeyEngine#1938) * solve issue jMonkeyEngine#1939 [NPE in FbxMesh.applyCluster()] (jMonkeyEngine#1940) * FBXCluster: create empty arrays if the cluster contains no keyframes * FbxLoader: don't construct an animation if there are no keyframes * update Groovy to v3.0.15 * Update Application.start javadoc. (jMonkeyEngine#1947) * Update RenderState.setLineWidth javadoc. (jMonkeyEngine#1948) * Fix jMonkeyEngine#1945 (IllegalStateException when running TestAWTPanels with LWJGL 3) (jMonkeyEngine#1949) * solve issue jMonkeyEngine#1879 (compile-time error in Skinning.glsllib) (jMonkeyEngine#1942) * Fix issue jMonkeyEngine#1558 (TestAWTPanels crashes with LWJGL v3 on Linux) (jMonkeyEngine#1944) * TestAwtPanels: apply swing system LAF. This is needed to prevent JVM crash on Linux and LWJGL 3. (See issue jMonkeyEngine#1558) * Use single class imports. * solve issue jMonkeyEngine#1806 (global FrameInterpolator violates threading model) (jMonkeyEngine#1943) * solve issue jMonkeyEngine#1806 (global FrameInterpolator violates threading model) * FrameInterpolator: deprecate the global instance * Fix a typo in LwjglWindow (jMonkeyEngine#1953) * Add WaterFilter.getReflectionView method (jMonkeyEngine#1951) * Added WaterFilter.getReflectionView method. * Update javadoc. * README.md: delete a dead link (Maker's Tale) * README.md: add a link to Wild Magic * resolve issue jMonkeyEngine#1955 (Can not play vorbis audio on Android API 31+) (jMonkeyEngine#1956) * android-native-vorbis: fix double asset file descriptor closure * NativeVorbis: better names and javadocs * NativeVorbisFile#readIntoBuffer: specifies the start and the end of the read * NativeVorbisFile: better explanation for the output buffer on read functions * com_jme3_audio_plugins_NativeVorbisFile.c: refactored logs * NativeVorbisFile: some docs enhances * NativeVorbisLoader: added updated jme3-copyright * [skip ci] update natives snapshot * jme3-jogg: remove dependency on Java Media Framework (jMonkeyEngine#1962) * solve issue jMonkeyEngine#1960 (use jme3-jogg for loading ogg files on android) (jMonkeyEngine#1961) * solve issue jMonkeyEngine#1963 (TestMusicPlayer fails to load AL library on lwjgl2) (jMonkeyEngine#1964) * TestMusicPlayer: fix UnsatisfiedLinkError when using lwjgl2. Solves issue jMonkeyEngine#1963 * Add missing load function for "openal" natives. * Removed the unnecessary check for lwjgl 2 in classpath. * Fix comment * Replace Exception with warning in TerrainPatch (jMonkeyEngine#1966) * Replace Excpetion with warning in TerrainPatch PR following up on the discussion in this thread: https://hub.jmonkeyengine.org/t/terrain-collision-exception/46491/6 * Update TerrainPatch.java * Update TerrainPatch.java * Update TerrainPatch.java * Update TerrainPatch.java * Update TerrainPatch.java * Update TerrainPatch.java * Update TerrainPatch.java * Cleanup NativeLibraryLoader & fix wrong library path (jMonkeyEngine#1967) * Cleanup NativeLibraryLoader * Fix wrong library path * solve issue jMonkeyEngine#1969: missing check in GLRenderer.clearVertexAttribs() (jMonkeyEngine#1970) * solve issue jMonkeyEngine#1975: TestAttachDriver doesn't reset properly (jMonkeyEngine#1976) * Improve NativeLibraryLoader (jMonkeyEngine#1973) * Improve NativeLibraryLoader. * Add javadoc. * Moved library extraction requirement check into a separate method. * Fix javadoc. * Refactor library extraction check method. * Extract natives to system temp directory retrieved by System.getProperty("java.io.tmpdir") instead of working directory. * Renamed enum "Openal" to "OpenAL" and added javadoc on NativeLibraries. * Update comments. * Deploy master branch commits as snapshot (jMonkeyEngine#1983) * Deploy main branch commits as snapshot * Snapshot builds don't have a Release artifact * restrict snapshot to actual commits on master branch * Deploy steps don't actually use test-run maven artifacts * Partial Revert. We need that artifact * Fix sonatype snapshots repo url as mentioned in https://central.sonatype.org/publish/publish-guide/ * Allow use of Emissive color as a multiplier with EmissiveMap in PBRLighting (jMonkeyEngine#1979) * Add support for NormalScale in PBRLighting & GltfLoader (jMonkeyEngine#1980) * Added NormalScale factor in PBRLighting. The scalar parameter applied to each normal vector of the normal map. This value scales the normal vector in X and Y directions using the formula: `scaledNormal = normalize((<sampled normal texture value> * 2.0 - 1.0) * vec3(<normal scale>, <normal scale>, 1.0))`. * Add support for reading NormalScale in GltfLoader. * Add support for AoStrength in PBRLighting & GltfLoader (jMonkeyEngine#1981) * Added AoStrength factor in PBRLighting. A scalar multiplier controlling the amount of occlusion applied. * Add support for reading AoStrength in GltfLoader. * Fix ao calculation to follow gltf specs. * Update comment on AoStrength mentioning the min and max values. * Clamp ao to 0 for negative values that might cause by applying AoStrength > 1. * Use glsl clamp instead of max. * update Groovy to v3.0.16 * Some javadoc cleanup (jMonkeyEngine#1986) * Fix some invalid HTML tags * Correct deprecation annotations * Doc-comments cleanup - Corrected some typos, grammar, etc. - reflowed egregiously long comment lines to comply with column limits * README.md: latest stable version of Engine * LwjglContext: re-initialize renderer on context restart (lwjgl 2) (jMonkeyEngine#1988) * LwjglContext: initialize renderer on context restart (lwjgl 2). * Reset GL objects in renderer when context restart. * README.md: add Mravelous Marbles to the list of JME-powered games * update the LWJGL3 libraries from v3.3.1 to v3.3.2 * update Groovy to v3.0.17 * correctly handle negative IDs in getUniqueId() methods (jMonkeyEngine#1991) * NativeLibraryLoader: more detailed exception in computeNativesHash() (jMonkeyEngine#2001) * README.md: add "Boxer" to the project list * solve issue jMonkeyEngine#2003 (ParticleDepositionHeightMap.load return value) (jMonkeyEngine#2005) * solve issue jMonkeyEngine#2002 (TerrainGridTileLoaderTest fails to load tiles) (jMonkeyEngine#2006) * solve issue jMonkeyEngine#2002 (TerrainGridTileLoaderTest fails to load tiles) * TerrainGridTileLoaderTest: add a clarifying comment * solve issue jMonkeyEngine#2011 (app crashes when using OpenGL version 3.0 and 3.1 with LWJGL 3) (jMonkeyEngine#2009) * fix system crush issue when set desktop AppSetting.setRenderer below 3.2 * Revert "fix system crush issue when set desktop AppSetting.setRenderer below 3.2" This reverts commit 11b7c9e. * fix system crush issue when set desktop AppSetting.setRenderer below 3.2. This fix is reedited by instruction of ali_rs --------- Co-authored-by: ray <raymond.yang@cottonwoodanalytics.com> * solve issue jMonkeyEngine#2007 (instanced objects are culled when using WaterFilter) (jMonkeyEngine#2008) * Fix issue with InstancedGeometry that uses the wrong camera for "instance culling" check. * Minor javadoc update. * Variables should start with lower-case. (jMonkeyEngine#2013) New PullRequest as suggested in jMonkeyEngine#2012 Co-authored-by: Starcommander <starcommander@gmx.at> * solve issue jMonkeyEngine#1992: better messages in spatial assertions (jMonkeyEngine#1993) * jMonkeyEngine#1992 Improve the messages being reported from spatial assertions * jMonkeyEngine#1992 Make clear what name is in the assertion messages * jMonkeyEngine#1992 Whitespace correction * solve issue jMonkeyEngine#2015 (Picture class lacks 2 getters) * CloneableSmartAsset: clarify the setKey() javadoc (jMonkeyEngine#2018) * update Gradle to v7.6.1 --------- Signed-off-by: Kasper Aaquist Johansen <kasperaaquist@gmail.com> Co-authored-by: Scrappers Team <60224159+Scrappers-glitch@users.noreply.github.com> Co-authored-by: Github Actions <actions@users.noreply.github.com> Co-authored-by: Riccardo Balbo <riccardo0blb@gmail.com> Co-authored-by: Scrappers <scrappers.tm@gmail.com> Co-authored-by: Stephen Gold <sgold@sonic.net> Co-authored-by: Florian Frankenberger <f.frankenberger@mobiuscode.de> Co-authored-by: Wyatt Gillette <jefferydeaver2010@gmail.com> Co-authored-by: Lukas-Habring <102620478+Lukas-Habring@users.noreply.github.com> Co-authored-by: Lukas Habring <lukas@Lukas-PC> Co-authored-by: JosiahGoeman <31492985+JosiahGoeman@users.noreply.github.com> Co-authored-by: Paul Speed <pspeed42@users.noreply.github.com> Co-authored-by: Ali-RS <ali_codmw@yahoo.com> Co-authored-by: Toni Helenius <helenius.toni@gmail.com> Co-authored-by: Jan Schäfer <j@nschaefer.net> Co-authored-by: Kasper Aaquist Johansen <kasperaaquist@gmail.com> Co-authored-by: Michael Zuegg <zzuegg@users.noreply.github.com> Co-authored-by: manuelrmo <118840772+manuelrmo@users.noreply.github.com> Co-authored-by: Manuel <Manuel@DESKTOP-6RJH3UF> Co-authored-by: Noeri Huisman <8823461+mrxz@users.noreply.github.com> Co-authored-by: richardTingle <6330028+richardTingle@users.noreply.github.com> Co-authored-by: Ryan McDonough <peanut64646@gmail.com> Co-authored-by: Sailsman63 <lukejsails@gmail.com> Co-authored-by: Raymond Young <gongxi83@163.com> Co-authored-by: ray <raymond.yang@cottonwoodanalytics.com> Co-authored-by: Paul Kashofer <soundmodul@gmx.at> Co-authored-by: Starcommander <starcommander@gmx.at>
XrReferenceSpaceCreateInfo.malloc(stack) | ||
.type$Default() | ||
.next(NULL) | ||
.referenceSpaceType(XR_REFERENCE_SPACE_TYPE_LOCAL) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be XR_REFERENCE_SPACE_TYPE_LOCAL or XR_REFERENCE_SPACE_TYPE_STAGE. I found that it was surprising that my face was in the floor when I tried this; because XR_REFERENCE_SPACE_TYPE_LOCAL puts the origin at the headset position when the application is started but XR_REFERENCE_SPACE_TYPE_STAGE puts it at the origin of the play area (usually at floor level). Or maybe we should let the applications choose.
I thought this was a useful explanation
The difference between XR_REFERENCE_SPACE_TYPE_STAGE and XR_REFERENCE_SPACE_TYPE_LOCAL in OpenXR comes down to the origin and orientation of the coordinate system that the application will use to represent the position and orientation of devices, like headsets and controllers, within the virtual world.
In XR_REFERENCE_SPACE_TYPE_LOCAL, the origin is typically located at the position where the XR system was initialized. For example, in a seated VR experience, this could be the location of the headset at the time the application was started. The Y-axis is typically up, and the orientation is typically such that the forward direction (negative Z-axis) is facing in the initial direction of the user.
XR_REFERENCE_SPACE_TYPE_STAGE, on the other hand, is designed for standing, room-scale experiences. The origin is typically located at the center of the user's designated play area (if one has been defined), with the Y-axis pointing up, and the forward direction (negative Z-axis) is often facing a user-defined forward direction in the play area (like the direction facing the computer or the front of the room).
The practical differences a user might experience would depend on the application, but here are some examples:
In a room-scale VR game, if XR_REFERENCE_SPACE_TYPE_LOCAL is used, the user's initial position in the game might not be in the center of the play area, but somewhere near the edge or corner, because the origin is where the system was initialized, not the center of the play area. If the user moves around in the play area, they might move out of the game's designated area. Using XR_REFERENCE_SPACE_TYPE_STAGE in this case would be better, because it ensures the user starts in the center of the game's area and can freely move around within it.
If the user is sitting at a desk and not moving around (like in a cockpit simulator game), the difference between XR_REFERENCE_SPACE_TYPE_LOCAL and XR_REFERENCE_SPACE_TYPE_STAGE might not be noticeable, because the user is not using the play area. But if XR_REFERENCE_SPACE_TYPE_STAGE is used and the user's chair is not in the center of the play area, they might find themselves starting off-center in the game, which could be disorienting.
In general, the choice between XR_REFERENCE_SPACE_TYPE_LOCAL and XR_REFERENCE_SPACE_TYPE_STAGE should be based on the type of experience the application provides (seated vs. room-scale) and the user's physical environment.
Personally I always use stage even for seated applications because its easy to move the origin of the environment (what OpenVR era called the observer) to place the players head; but the local frame makes it really hard to figure out where to put the floor
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At least it should be configurable for app-developers.
I tried it with XR_REFERENCE_SPACE_TYPE_STAGE, and still moving does not work.
Just the rotation starts initial in wrong direction.
When you found a method, then where do you use it?
Regarding the "lensing-effect" you mentioned:
|
@Starcommander That's odd. I definitely can move my head and the cameras move (and closing and opening alternating eyes gives different angles on scene, as you'd expect. This is all on the openxr-actions branch. And in HelloOpenXRGL it sets the position and rotation for each eye
I'm not very happy with those coordinate transformations, as JME and OpenXR are supposed to have the same coordinate system. I might try putting in the observer (the reference node from OpenVR implementation) and see if I can use that instead to get consistent directions with the axes.
True, its when you rotate your head that the lensing becomes apparent. This is the test application I have been using (It only has suggested bindings for Oculus because that's what I've been using to test)
There is definitely something wrong with the scene, the boxes seem like they are being looked at from the inside |
I've got hand skeletons more or less working. Weirdly they are mirror images (So the left hand has a right hand and vice versa). Might be more coordinate incompatibilities between JME and OpenXR. This shows the hand joints (each cube is a joint), the large green cube is the overall pose location I don't want to go too much further without getting the cameras sorted out (especially given the coordinate transformations that seem to be being needed). Do you mind if we look at that in parallel and see what we both find? |
I've asked a question about the lensing at https://hub.jmonkeyengine.org/t/openxr-vr-rendering-cameras-into-eyes/46837 |
New PullRequest as suggested in #2012 Co-authored-by: Starcommander <starcommander@gmx.at>
@richardTingle I found out, why we see the boxes from inside. |
…ault in jme3. Fixes the issue, that object are only visible from inner side.
@Starcommander Nice! I bet that was why the hands were showing mirror imaged. I should be able to remove a bunch of nasty fudge factors from the actions stuff now which will put me in a much better place for getting tamarin hands working. |
@richardTingle: Hint: You have to disable GL_CULL_FACE in HelloOpenXRGL.java.
Otherwise you will have a black screen, as offGeo is not rendered.
Am 18. Juni 2023 13:54:42 MESZ schrieb richardTingle ***@***.***>:
…
@Starcommander Nice! I bet that was why the hands were showing mirror imaged. I should be able to remove a bunch of nasty fudge factors from the actions stuff now which will put me in a much better place for getting tamarin hands working.
--
Reply to this email directly or view it on GitHub:
#2012 (comment)
You are receiving this because you commented.
Message ID: ***@***.***>
|
What's the status of this PR? Is this still a work in progress, or has it stalled out? |
I tried to figure out where the lensing effect was coming from, but in the end I gave up. I think to solve that I'd have to start from scratch to really understand what's going on. I'm not actively working on it, not sure if @Starcommander2 is |
Is still work in progress. Also I am very interested in the configuration (Hardware, OS, xr-runtime) that @richardTingle uses. |
I'm on and Oculus Quest 2, over virtual desktop to a windows 10 PC using Steam VR as my xr-runtime |
I have had another go at this. I started again from the openXR HelloOpenXRGL example making sure I understood what it was doing but taking what we learned from this attempt as well. I think I've solved it this time. I found why I was getting lensing effects; the OpenXR runtime was requesting an asymmetrical field of view (with angleLeft != angleRight) but I was using the standard camera#setFrustumPerspective which doesn't support asymmetrical field of view but when I instead calculated a projection matrix and used camera#setProjectionMatrix it stopped lensing. It makes sense to me now that @Starcommander didn't see the lensing as presumably your headset didn't request an asymmetrical field of view (or al least not so heavily asymmetric) and so the problem didn't occur for you. We were talking before about whether this should be in JMonkey proper or in a library. I did my attempt in a tamarin 2.x branch. Are we ok with that as an approach @Starcommander & @stephengold ? My approach adopts the existing JMonkey OpenGL context rather than creating its own which means it can be a pure app state attached "whenever" in the applications running process rather than needing to be booted up before JMonkey. An ultra minimal example application would look like this
I already have these things working:
I am now working on these
Once I get those working I'll start updating the TamarinTestBed examples to use this. Once that all works we'll be approaching parity with OpenVR |
As far as I'm concerned, the decision whether to be an Engine library or a 3rd-party library is up to you. I see a lot of advantages to being a 3rd-party library, especially if the codebase is changing rapidly. But in principle I have no objection to making jme3-xr part of the Engine. |
@richardTingle Thanks for working this out. I found out, why moving does not work with my configuration. When this project is working well, I still prefer to include it into the engine. |
re: "When this project is working well, I still prefer to include it into the engine." ...better get it 100% perfect then since then it will go into 1.5 year release cycles and be painful to update as VR tech changes. "Sorry, that bug will be fixed next time the giant monolithic JME releases again..." |
I do think I agree with @pspeed42 and @stephengold ; I think I plan to continue with a Tamarin 2. But that doesn't preclude other XR projects like this one. It might make sense to have a move-fast-and-break-things Tamarin 2 and a more stable JME3-XR |
Multiply movement.
I have now compiled monado-service with libsurvive support. |
This pull-request adds the feature for using openxr in jme3.
It is a working first implemention and some improvements are still necessary.
View perspective is not correctlyI tested it (and works) with OSVR-HMD on Debian 11 (Bullseye) with running monado-service.
I also tested it (and works) with my HTC-VIVE.
To get it running:
XrHmd.setRendererForSettings(appSettings);
XrHmd.initHmd(this);