JOML | A Java math library for OpenGL rendering calculations | Math library

 by   JOML-CI Java Version: 1.10.5 License: MIT

kandi X-RAY | JOML Summary

kandi X-RAY | JOML Summary

JOML is a Java library typically used in Utilities, Math applications. JOML has no bugs, it has no vulnerabilities, it has build file available, it has a Permissive License and it has low support. You can download it from GitHub, Maven.

A Java math library for OpenGL rendering calculations | use it on: Desktop / Android / GWT.
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              JOML has a low active ecosystem.
              It has 646 star(s) with 100 fork(s). There are 35 watchers for this library.
              OutlinedDot
              It had no major release in the last 12 months.
              There are 3 open issues and 224 have been closed. On average issues are closed in 12 days. There are 2 open pull requests and 0 closed requests.
              It has a neutral sentiment in the developer community.
              The latest version of JOML is 1.10.5

            kandi-Quality Quality

              JOML has 0 bugs and 0 code smells.

            kandi-Security Security

              JOML has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
              JOML code analysis shows 0 unresolved vulnerabilities.
              There are 0 security hotspots that need review.

            kandi-License License

              JOML is licensed under the MIT License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              JOML releases are available to install and integrate.
              Deployable package is available in Maven.
              Build file is available. You can build the component from source.
              Installation instructions are not available. Examples and code snippets are available.
              JOML saves you 49385 person hours of effort in developing the same functionality from scratch.
              It has 64551 lines of code, 9655 functions and 133 files.
              It has high code complexity. Code complexity directly impacts maintainability of the code.

            Top functions reviewed by kandi - BETA

            kandi has reviewed JOML and discovered the below as its top functions. This is intended to give you an instant insight into JOML implemented functionality, and help decide if they suit your requirements.
            • Compute a 4D noise
            • Computes the 3D noise of a vector
            • Compute a complexx noise
            • Determine the intersection of a sphere
            • Computes the lowest root of the quadratic
            • Finds the closest points on a line
            • Test whether a point is inside the triangle
            • Finds the closest point on a line segment
            • Returns the closest point on the two line segments
            • Preprocess polygons
            • Builds a tree node based on the list of intervals
            • Computes the direction of the frustum
            • Computes the perspective transformation
            • Sets the perspective transformation
            • Returns a frustum perpendicular to the specified corner
            • Invert a column vector into an inverse matrix
            • Test if an intersecting box
            • Compute the ray direction of the frustum plane
            • Updates the frustum corner array
            • Compute the projected grid range from a projection matrix
            • Computes the extents of the coordinate system
            • Test whether a sphere is sphere
            • Test if a sphere is a sphere
            • Computes a projected grid range and returns the projection matrix
            • Computes the eye of the given perspective projection matrix
            • Computes the weighted average of all quaternions
            Get all kandi verified functions for this library.

            JOML Key Features

            No Key Features are available at this moment for JOML.

            JOML Examples and Code Snippets

            No Code Snippets are available at this moment for JOML.

            Community Discussions

            QUESTION

            Loss of 3D projection when migrating from LWJGL 2 to LWJGL 3 with JOML
            Asked 2022-Jan-21 at 09:33

            I have a small project, which was written with LWJGL 2 and wanted now to move to version 3. I changed the main lib without bigger problems. But in small steps. So I first didn't do a change to the Vector and Matrix classes. Instead, in the new project I added the old lwjgl_util.jar. I could render everything as normal. The only loss I had till this point was the input of keyboard and mouse, but this is not a big problem.

            The next and crucial step was to delete the extra .jar file again and change all imports to the org.joml.Vector2f, org.joml.Vector2f and org.joml.Matrix4f classes, and the needed changes in my code. Eclipse says there is no more error, and so says the JVM too.

            The code runs, if I print vectors or matrices. They all have data as they should.

            But instead of the normal world it should render, there is only the clear color for the background (the correct one btw.).

            My thinking is, I got no data from Java to the shader and shader multiplies all matrices to zero and I can't see anything.

            I found this line on https://github.com/JOML-CI/JOML/wiki/Migrating-from-LWJGL-2 and have an idea that this could may be my problem, but I don't understand exactly what it means:

            One important difference is the handling of NIO FloatBuffers when getting values from or writing values into a FloatBuffer. In LWJGL 2 the position of the FloatBuffer will be incremented by load and store operations. In JOML the position will not be changed!

            So my question now:

            How is the handling of the FloatBuffers with this not changing position be done?

            ...

            ANSWER

            Answered 2022-Jan-21 at 09:33
            tl;dr

            Remove the call to matrixBuffer.flip()

            Longer Explanation

            To know why your code does not work requires you to know what Buffer.flip() (called via your FloatBuffer.flip()) does exactly:

            Flips this buffer. The limit is set to the current position and then the position is set to zero. If the mark is defined then it is discarded.

            (bold highlight by me).

            You know, a NIO Buffer has a position, mark, limit and capacity. When you create a new NIO Buffer e.g. via BufferUtils.createFloatBuffer(size) then you will be given a FloatBuffer that is a view of an underlying direct ByteBuffer which has a capacity of size, a limit of size, a position of 0 and no mark set.

            Usually, relative NIO Buffer put operations in the JDK will increment the buffer's position. However, JOML's Matrix/Vector.get(Buffer) won't do this, much like all LWJGL/OpenGL methods which take a NIO Buffer as parameter, such as GL15.glBufferData(...).

            So, when you call Matrix4f.get(FloatBuffer) then the position of the supplied Buffer will not be modified and therefore, calling .flip() on that buffer afterwards will set the limit of the buffer to where the buffer's position was (likely 0).

            The next thing you need to know is that LWJGL methods that take a NIO Buffer will use the buffer's .remaining() (which is .limit() - .position()) to determine the argument value to any size/length parameters for the underlying native OpenGL function call. In the case of glUniformMatrix4fv() with native signature:

            void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);

            LWJGL will infer the value for the count parameter based on the .remaining() / 16 of the supplied NIO Buffer. Since your Buffer likely has a .remaining() of 0 (due to the .flip() call when said buffer had a position of 0 - due to Matrix4f.get(FloatBuffer) not having incremented the position) the supplied OpenGL function argument will be 0, which will cause a noop in this case.

            Source https://stackoverflow.com/questions/70793756

            QUESTION

            Failed to load library liblwjgl.so
            Asked 2022-Jan-04 at 20:04

            I was trying to export .jar file of my lwjgl game so I can send it to my friend using gradle. When I've opened jar in /build/libs via typing java -jar [name of file] this error message appear:

            ...

            ANSWER

            Answered 2022-Jan-04 at 20:02

            You are currently not including the runtime natives jar files of LWJGL into your fat jar file.

            So, you don't need to add any JVM arguments like -Djava.library.path or -Dorg.lwjgl.librarypath but merely must make sure that the "natives-linux" dependencies/jar files are in the classpath when you run the jar.

            One way to achieve this in your case is by not only iterating over the compile-time dependencies but over the runtime dependencies in your jar task to also collect those and add them to the fat jar file that you build, because you definitely will need them at runtime.

            So, change this line:

            Source https://stackoverflow.com/questions/70584147

            QUESTION

            Why is my 3D cube distorting when rotating?
            Asked 2021-Dec-01 at 13:20

            The problem is that when rotating my 3D cube on more than one axes, it distorts weirdly roughly halfway through. I am using the JOML math library for matrices.

            ...

            ANSWER

            Answered 2021-Nov-27 at 21:04

            There are 2 mistakes in your code:

            First: you try to update 2 axis at once. Doing this will cause the model to scale as it rotates.

            Second: you don't use 1.0f when defining what axis you want to rotate. This aswell causes the model to scale.

            The way Matrix4f.rotate(float angleInRadiants, Vector3f(x, y, z)) works is it will rotate the axis specified in the the vector by the specified angleInRadians.

            This is the correct way to rotate both axis:

            Source https://stackoverflow.com/questions/70138172

            QUESTION

            (LWJGL 3.2.3) build.gradle won't build when implementing LWJGL components
            Asked 2021-Nov-03 at 14:45

            Can someone help me? My "build.gradle" won't build when implementing LWJGL and JOML.

            Here's my build.gradle:

            ...

            ANSWER

            Answered 2021-Nov-03 at 14:45

            The presented build.gradle file is not a complete build.gradle file, lacking the "implementation" configuration. If you simply copied the snippet generated by lwjgl.org/customize then this would not give you a complete working build.gradle file. You still have to include some Gradle plugin such as "application" that will make the "implementation" configuration available.

            So, in order to fix this, add the following at the very top of your build.gradle file:

            Source https://stackoverflow.com/questions/69825962

            QUESTION

            What is the correct way to rotate a quaternion from its current rotation a certain angle?
            Asked 2021-Oct-16 at 15:20

            I am trying to use quaternion rotation using the quaternion from JOML: https://github.com/JOML-CI/JOML/blob/main/src/org/joml/Quaternionf.java.

            I can get objects to rotate but they get stuck and are unable to complete a full rotation. The object is being updated every frame.

            Edit: Removed all euler related code and am simply trying to get the object to rotate on a single axis based on a certain angle.

            Edit 2: Am trying to use the conjugate and multiplying the quaternions together like I have seen in some videos. I'm not quite there though as the model spins itself off the screen for some reason.

            Edit 3: Normalizing the quaternion fixed the disappearing behaviour. The issue seems to be that there's no simple way to rotate a certain amount without either having a timer to lerp over which will not work in my case as I am trying to rotate an object an arbitrary amount with no set beginning and end.

            Rotation function

            ...

            ANSWER

            Answered 2021-Oct-11 at 08:04

            It does not matter whether you transform your Euler angles into a matrix or a quaternion or whatever representation: As long as you use Euler angles to represent an orientation, Gimbal Lock is unavoidable.

            So, in order to avoid Gimbal Lock from happening, you must discard using Euler Angles and stay with one representation for an orientation (like a 3x3 matrix or a quaternion) and apply delta changes to them, instead of trying to represent a full orientation as three Euler angles. So, whenever you - let's say - rotate the object a few degrees around a certain axis, you apply that delta change or orientation to the matrix/quaternion.

            Source https://stackoverflow.com/questions/69521185

            QUESTION

            Oriented projectiles keep facing camera
            Asked 2021-Oct-16 at 15:17

            I'm trying to render a 2d image that represent a projectile in a 3d world and i have difficulty to make the projectile face the camera without changing its direction. Im using JOML math library.

            my working code to orient the projectile in his direction

            ...

            ANSWER

            Answered 2021-Oct-16 at 15:05

            Since you are using JOML, you can massively simplify your whole setup.

            Let's assume that:

            • projectilePosition is the position of the projectile,
            • targetPosition is the position the projectile is flying at/towards, and
            • cameraPosition is the position of the "camera" (which we ultimately want the projectile to face)

            We will also assume that the local coordinate system of the projectile is such that its +X axis points along the projectile's path (like how you depicted it) and the +Z axis points away from the projectile towards the viewer when the viewer is "facing" the projectile. So, the projectile itself is defined as a quad on the XY plane within its own local coordinate system.

            What we must do now is create a basis transformation that will effectively transform the projectile such that its X axis points towards the "target" and its Z axis points "as best as we can" towards the camera.

            This is very reminiscent of what we know as the "lookAt" transformation in OpenGL. And in fact, we are just going to use that. However, since the common "lookAt" is the inverse of what we wanted to do, we will also just invert it.

            So, all in all, your complete model matrix/transformation for a single projectile will look like this (in JOML):

            Source https://stackoverflow.com/questions/69505698

            QUESTION

            OpenGL particle-system, problem with projection matrix
            Asked 2021-Jul-19 at 16:16

            I am trying to implement a particle system in Opengl with Kotlin and Joml. Following the advices of a tutorial I only have to create a projection matrix for the vertex shader and to do perspective division with ortho(). This is my code for the matrix

            ...

            ANSWER

            Answered 2021-Jul-19 at 14:52

            Moreover it is not possible to move it by the offset vector any longer. I don't really understand why.

            It is certainly possible to move your object by changing offset. You just set it up in a way that offset is now in pixels (relative to an assumed 1280x720 viewport size, which might or might not be the exact pixel size of your viewport). So if without the projection matrix, an offset of 1 meant to move half the viewport width (which is 2 in NDC), and offset of 1 now means just 1/1280 of the viewport width.

            Source https://stackoverflow.com/questions/68440189

            QUESTION

            How to "stream" multiple object fields from an ArrayList to an array of double using mapToDouble?
            Asked 2021-Jun-24 at 12:47

            I have multiple object of class org.joml.Vector3f stored in an ArrayList. The class has 3 float fields: x, y and z. I would like to save them all in a java.nio.DoubleBuffer so I wanted to do something like this:

            ...

            ANSWER

            Answered 2021-Jun-24 at 12:47

            QUESTION

            OpenGL (LWJGL 3) culling terrain vertices/triangles that are not in the view frustum
            Asked 2021-Jun-13 at 19:55

            I am trying to implement frustum culling in my 3D Game currently and it has worked efficiently with the entities because they have a bounding box (AABB) and its easier to check a box against the frustum. On saying that, how would I cull the terrain? (it physically cannot have a AABB or sphere)

            The frustum class (I use the inbuilt JOML one):

            ...

            ANSWER

            Answered 2021-Jun-13 at 19:55

            One way to determine what section of your terrain should be culled is to use a quadtree (for a heightmap) or an octree (for a voxel map). Basically, you divide your terrain into little chunks that then get divided further accordingly. You can then test if these chunks are in your viewing frustum and cull them if necessary. This technique was already discussed in great detail:

            I saw some websites saying to use GL_DYNAMIC_DRAW instead of GL_STATIC_DRAW, but I did not understand it.

            These are usage hints to OpenGL on how the data will be accessed so the implementation has the ability to apply certain optimizations on how to store/use it.

            usage is a hint to the GL implementation as to how a buffer object's data store will be accessed. This enables the GL implementation to make more intelligent decisions that may significantly impact buffer object performance. (https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferData.xhtml)

            Please note that these are only indications, no restrictions:

            It does not, however, constrain the actual usage of the data store.

            Because you will likely update your VBO's and IBO's constantly (see culling) and only want to draw them GL_DYNAMIC_DRAW would be a good choice:

            The data store contents will be modified repeatedly (because of culling) and used many times. The data store contents are modified by the application and used as the source for GL drawing and image specification commands.

            as I have googled that it can affect the performance of the game

            Well, it will cost some performance to cull your terrain but in the end, it will likely gain performance because many vertices (triangles) can be discarded. This performance gain may grow with larger terrains.

            Source https://stackoverflow.com/questions/67958723

            QUESTION

            Problem with some LWJGL classes on import (Eclipse)
            Asked 2021-Mar-27 at 09:20

            I downloaded the release build without modifying (https://www.lwjgl.org/customize) I put all the classes in Eclipse. Some classes are not recognized

            The codes that do not need these classes in error, work normally. As in https://www.lwjgl.org/guide

            All the classes I put:

            ...

            ANSWER

            Answered 2021-Mar-27 at 09:20

            You are trying to compile LWJGL 2 code here. All the imports that it cannot find pertain to the verison 2 of LWJGL. The current version that you can get from the mentioned lwjgl site is 3 and version 3 is incompatible with version 2.

            Either explicitly download LWJGL 2 from e.g. http://legacy.lwjgl.org/ or rewrite your code to work with LWJGL 3.

            If you go the LWJGL 2 route, though, please note that it hasn't been actively maintained anymore for more than 6 years now.

            Source https://stackoverflow.com/questions/66827323

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install JOML

            You can download it from GitHub, Maven.
            You can use JOML like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the JOML component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .

            Support

            For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            Install
            Maven
            Gradle
            CLONE
          • HTTPS

            https://github.com/JOML-CI/JOML.git

          • CLI

            gh repo clone JOML-CI/JOML

          • sshUrl

            git@github.com:JOML-CI/JOML.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link