This project is a port of Learning Modern 3D Graphics Programming tutorials to Java using LWJGL and JOML. The original project, named gltut, can be found here. Since it is needed by the tutorials, this repository also includes a partial port of the Unofficial OpenGL SDK, named glsdk, which contains a DDS texture loader and other useful stuff.
To suggest a feature, report bugs or general discussion use the issue tracker. Contributions are welcome!
To compile and run the code, you will need:
- Java SE Development Kit 8
- LWJGL 3.1.0 build 40
- JOML 1.9.0
Working with different versions of LJWGL 3 or JOML may require adjustments to the code. If you are stuck with LWJGL 2, check the release v0.9.1 of this repository.
Create a new Java project using your favorite IDE, then:
- Import the source code of this repository;
- Download LWJGL from the link above, then add
lwjgl.jarand the other JARs to the classpath and link the native libraries, as explained in the official guide; - Download
joml-1.9.0.jarfrom the link above, then add it to the classpath as in the previous step.
Finally, run the main method of the first tutorial integeruser.jgltut.tut01.Tut1.java and check the output in the console window. If your graphics card does not meet the minimum requirements (checked using the LWJGL helper GL.getCapabilities().OpenGL33), the message You must have at least OpenGL 3.3 to run this tutorial. will appear; otherwise, if no other errors show up, you can start playing with the other tutorials by running the main method of integeruser.jgltut.TutorialChooser.java. To quit any tutorial simply press ESC.
Note for OS X users: to run SWT applications on OS X it is necessary to use the JVM option XstartOnFirstThread. Because of this, TutorialChooser.java can not work correctly on OS X.
I decided to keep the ported code as similar as possible to the original C++ code, and therefore variables and functions are almost identical to their counterpart in the original projects. The only notable difference is the introduction of the commons package to collect some classes used in several parts of the project. I also decided to keep the same directory layout:
jglsdk/
|-- glimg/
|-- glutil/
jgltut/
|-- commons/
|-- data/
|-- framework/
|-- tut01/
|------ Tut1.java
|-- tut02/
|------ data/
|------ FragPosition.java
|------ VertexColor.java
|-- ...
|-- ...
|-- ...
|-- tut17/
|------ data/
|------ CubePointLight.java
|------ DoubleProjection.java
|------ ProjectedLight.java
|-- Tutorial.java
|-- TutorialChooser.java
The LWJGL license can be found here.
The JOML license can be found here.
Licenses of the projects gltut and glsdk can be found here and
here. Extract from the gltut license:
The following files are copywritten and distributed under the Creative Commons Attribution 3.0 Unported (CC BY 3.0) license, as described in the "./CC BY 3.0 legalcode.txt" file. Attribution for these works is presented here:
Attributed to Etory, of OpenGameArt.org:
- data/seamless_rock1_small.dds
Attributed to p0ss, of OpenGameArt.org:
- data/concrete649_small.dds
- data/dsc_1621_small.dds
- data/rough645_small.dds