diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3516599
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+bin/*
+.project
+.classpath
\ No newline at end of file
diff --git a/Diffuse light/.classpath b/Diffuse light/.classpath
deleted file mode 100644
index bab40ed..0000000
--- a/Diffuse light/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/Diffuse light/.project b/Diffuse light/.project
deleted file mode 100644
index 22ba6be..0000000
--- a/Diffuse light/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- Diffuse light
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
-
-
diff --git a/Diffuse light/bin/.gitignore b/Diffuse light/bin/.gitignore
deleted file mode 100644
index 30ec721..0000000
--- a/Diffuse light/bin/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/fr/
-/mrdev023/
diff --git a/Diffuse light/res/shaders/light.frag b/res/shaders/light.frag
similarity index 97%
rename from Diffuse light/res/shaders/light.frag
rename to res/shaders/light.frag
index eec69e8..2b5d2f2 100644
--- a/Diffuse light/res/shaders/light.frag
+++ b/res/shaders/light.frag
@@ -1,78 +1,78 @@
-#version 150
-//precision highp float;
-uniform mat4 transform;
-uniform sampler2D materialTex;
-uniform float materialShininess;
-uniform vec3 materialSpecularColor;
-uniform vec3 cameraPosition;
-
-#define MAX_LIGHTS 10
-uniform int numLights;
-uniform struct Light {
- vec4 position;
- vec3 intensities; //a.k.a the color of the light
- float attenuation;
- float ambientCoefficient;
- float coneAngle;
- vec3 coneDirection;
-} allLights[MAX_LIGHTS];
-
-in vec2 fragTexCoord;
-in vec3 fragNormal;
-in vec3 fragVert;
-
-out vec4 finalColor;
-
-vec3 ApplyLight(Light light, vec3 surfaceColor, vec3 normal, vec3 surfacePos, vec3 surfaceToCamera) {
- vec3 surfaceToLight;
- float attenuation = 1.0;
- if(light.position.w == 0.0) {
- //directional light
- surfaceToLight = normalize(light.position.xyz);
- attenuation = 1.0; //no attenuation for directional lights
- } else {
- //point light
- surfaceToLight = normalize(light.position.xyz - surfacePos);
- float distanceToLight = length(light.position.xyz - surfacePos);
- attenuation = 1.0 / (1.0 + light.attenuation * pow(distanceToLight, 2));
-
- //cone restrictions (affects attenuation)
- float lightToSurfaceAngle = degrees(acos(dot(-surfaceToLight, normalize(light.coneDirection))));
- if(lightToSurfaceAngle > light.coneAngle){
- attenuation = 0.0;
- }
- }
-
- //ambient
- vec3 ambient = light.ambientCoefficient * surfaceColor.rgb * light.intensities;
-
- //diffuse
- float diffuseCoefficient = max(0.0, dot(normal, surfaceToLight));
- vec3 diffuse = diffuseCoefficient * surfaceColor.rgb * light.intensities;
-
- //specular
- float specularCoefficient = 0.0;
- if(diffuseCoefficient > 0.0)
- specularCoefficient = pow(max(0.0, dot(surfaceToCamera, reflect(-surfaceToLight, normal))), materialShininess);
- vec3 specular = specularCoefficient * materialSpecularColor * light.intensities;
-
- //linear color (color before gamma correction)
- return ambient + attenuation*(diffuse + specular);
-}
-
-void main() {
- vec3 normal = normalize(transpose(inverse(mat3(transform))) * fragNormal);
- vec3 surfacePos = vec3(transform * vec4(fragVert, 1));
- vec4 surfaceColor = texture(materialTex, fragTexCoord);
- vec3 surfaceToCamera = normalize(cameraPosition - surfacePos);
-
- //combine color from all the lights
- vec3 linearColor = vec3(0);
- for(int i = 0; i < numLights; ++i){
- linearColor += ApplyLight(allLights[i], surfaceColor.rgb, normal, surfacePos, surfaceToCamera);
- }
-
- //final color (after gamma correction)
- vec3 gamma = vec3(1.0/2.2);
- finalColor = vec4(pow(linearColor, gamma), surfaceColor.a);
+#version 150
+//precision highp float;
+uniform mat4 transform;
+uniform sampler2D materialTex;
+uniform float materialShininess;
+uniform vec3 materialSpecularColor;
+uniform vec3 cameraPosition;
+
+#define MAX_LIGHTS 10
+uniform int numLights;
+uniform struct Light {
+ vec4 position;
+ vec3 intensities; //a.k.a the color of the light
+ float attenuation;
+ float ambientCoefficient;
+ float coneAngle;
+ vec3 coneDirection;
+} allLights[MAX_LIGHTS];
+
+in vec2 fragTexCoord;
+in vec3 fragNormal;
+in vec3 fragVert;
+
+out vec4 finalColor;
+
+vec3 ApplyLight(Light light, vec3 surfaceColor, vec3 normal, vec3 surfacePos, vec3 surfaceToCamera) {
+ vec3 surfaceToLight;
+ float attenuation = 1.0;
+ if(light.position.w == 0.0) {
+ //directional light
+ surfaceToLight = normalize(light.position.xyz);
+ attenuation = 1.0; //no attenuation for directional lights
+ } else {
+ //point light
+ surfaceToLight = normalize(light.position.xyz - surfacePos);
+ float distanceToLight = length(light.position.xyz - surfacePos);
+ attenuation = 1.0 / (1.0 + light.attenuation * pow(distanceToLight, 2));
+
+ //cone restrictions (affects attenuation)
+ float lightToSurfaceAngle = degrees(acos(dot(-surfaceToLight, normalize(light.coneDirection))));
+ if(lightToSurfaceAngle > light.coneAngle){
+ attenuation = 0.0;
+ }
+ }
+
+ //ambient
+ vec3 ambient = light.ambientCoefficient * surfaceColor.rgb * light.intensities;
+
+ //diffuse
+ float diffuseCoefficient = max(0.0, dot(normal, surfaceToLight));
+ vec3 diffuse = diffuseCoefficient * surfaceColor.rgb * light.intensities;
+
+ //specular
+ float specularCoefficient = 0.0;
+ if(diffuseCoefficient > 0.0)
+ specularCoefficient = pow(max(0.0, dot(surfaceToCamera, reflect(-surfaceToLight, normal))), materialShininess);
+ vec3 specular = specularCoefficient * materialSpecularColor * light.intensities;
+
+ //linear color (color before gamma correction)
+ return ambient + attenuation*(diffuse + specular);
+}
+
+void main() {
+ vec3 normal = normalize(transpose(inverse(mat3(transform))) * fragNormal);
+ vec3 surfacePos = vec3(transform * vec4(fragVert, 1));
+ vec4 surfaceColor = texture(materialTex, fragTexCoord);
+ vec3 surfaceToCamera = normalize(cameraPosition - surfacePos);
+
+ //combine color from all the lights
+ vec3 linearColor = vec3(0);
+ for(int i = 0; i < numLights; ++i){
+ linearColor += ApplyLight(allLights[i], surfaceColor.rgb, normal, surfacePos, surfaceToCamera);
+ }
+
+ //final color (after gamma correction)
+ vec3 gamma = vec3(1.0/2.2);
+ finalColor = vec4(pow(linearColor, gamma), surfaceColor.a);
}
\ No newline at end of file
diff --git a/Diffuse light/res/shaders/light.vert b/res/shaders/light.vert
similarity index 95%
rename from Diffuse light/res/shaders/light.vert
rename to res/shaders/light.vert
index ee3c9f5..c8a0407 100644
--- a/Diffuse light/res/shaders/light.vert
+++ b/res/shaders/light.vert
@@ -1,23 +1,23 @@
-#version 150
-
-uniform mat4 projection;
-uniform mat4 camera;
-uniform mat4 transform;
-
-in vec3 vert;
-in vec2 vertTexCoord;
-in vec3 vertNormal;
-
-out vec3 fragVert;
-out vec2 fragTexCoord;
-out vec3 fragNormal;
-
-void main() {
- // Pass some variables to the fragment shader
- fragTexCoord = vertTexCoord;
- fragNormal = vertNormal;
- fragVert = vert;
-
- // Apply all matrix transformations to vert
- gl_Position = projection * camera * transform * vec4(vert, 1);
+#version 150
+
+uniform mat4 projection;
+uniform mat4 camera;
+uniform mat4 transform;
+
+in vec3 vert;
+in vec2 vertTexCoord;
+in vec3 vertNormal;
+
+out vec3 fragVert;
+out vec2 fragTexCoord;
+out vec3 fragNormal;
+
+void main() {
+ // Pass some variables to the fragment shader
+ fragTexCoord = vertTexCoord;
+ fragNormal = vertNormal;
+ fragVert = vert;
+
+ // Apply all matrix transformations to vert
+ gl_Position = projection * camera * transform * vec4(vert, 1);
}
\ No newline at end of file
diff --git a/Diffuse light/res/textures/Thumbs.db b/res/textures/Thumbs.db
similarity index 100%
rename from Diffuse light/res/textures/Thumbs.db
rename to res/textures/Thumbs.db
diff --git a/Diffuse light/res/textures/wooden-crate.jpg b/res/textures/wooden-crate.jpg
similarity index 100%
rename from Diffuse light/res/textures/wooden-crate.jpg
rename to res/textures/wooden-crate.jpg
diff --git a/Diffuse light/src/fr/technicalgames/Main.java b/src/fr/technicalgames/Main.java
similarity index 97%
rename from Diffuse light/src/fr/technicalgames/Main.java
rename to src/fr/technicalgames/Main.java
index 37a0169..91db18e 100644
--- a/Diffuse light/src/fr/technicalgames/Main.java
+++ b/src/fr/technicalgames/Main.java
@@ -1,113 +1,113 @@
-package fr.technicalgames;
-
-//http://www.tomdalling.com/blog/modern-opengl/08-even-more-lighting-directional-lights-spotlights-multiple-lights/
-
-import static org.lwjgl.glfw.GLFW.*;
-import static org.lwjgl.opengl.GL11.*;
-import static org.lwjgl.system.MemoryUtil.*;
-
-import org.lwjgl.glfw.*;
-import org.lwjgl.opengl.*;
-
-import fr.technicalgames.audio.*;
-import fr.technicalgames.game.*;
-import fr.technicalgames.input.*;
-import fr.technicalgames.math.*;
-import fr.technicalgames.render.*;
-
-public class Main {
-
- //Valeur de la fenetre
- public static final int WIDTH = 800,HEIGHT = 600;
- public static final String TITLE = "Test Shader OpenGL";
-
- //Variable pour la gestion de la fenetre
- public static long windowID = 0;
- public static float mousePositionX = 0,mousePositionY = 0,dMouseX = 0,dMouseY = 0;
- public static GLFWErrorCallback errorCallback;
-
- //variable du moteur du jeu
- public static float delta = 0;
- public static Game game;
- public static long previous = System.currentTimeMillis(),previousInfo = System.currentTimeMillis(),previousTicks = System.currentTimeMillis();
- public static int FPS = 0,TICKS = 0;
-
- public static void main(String[] args) throws Exception {
- //Creation de la fenetre
- //------------------------------------------------------------------------------------
- errorCallback = new GLFWErrorCallback() {
- public void invoke(int error, long description) {
- System.err.println("ID : " + error + " | Description :" + description);
- }
- };
-// glfwSetErrorCallback(errorCallback);
-
- if(glfwInit() != GL11.GL_TRUE)throw new Exception("GLFW not init");
- glfwDefaultWindowHints();
- glfwWindowHint(GLFW_VISIBLE, GL11.GL_FALSE);
- glfwWindowHint(GLFW_RESIZABLE, GL11.GL_FALSE);
- glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
- windowID = glfwCreateWindow(WIDTH,HEIGHT,TITLE,NULL,NULL);
- GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
- glfwSetWindowPos(windowID,(vidmode.width()-WIDTH)/2,(vidmode.height()-HEIGHT)/2);
- glfwShowWindow(windowID);
- glfwMakeContextCurrent(windowID);
- GL.createCapabilities();
- System.out.println("OpenGL Version :" + glGetString(GL_VERSION));
- System.out.println("GLSL Shader Version :" + glGetString(GL20.GL_SHADING_LANGUAGE_VERSION));
- //------------------------------------------------------------------------------------
-
- //Creation du device audio
- //------------------------------------------------------------------------------------
- Audio.create();
- //------------------------------------------------------------------------------------
-
- //initialisation
- //------------------------------------------------------------------------------------
- Input.init();
- game = new MainGame();
-
- Camera.rot = new Vector3f(-3.0f,-338.0f,0.0f);
- Camera.pos = new Vector3f(1.5242399f,0.0f,-13.456063f);
- Camera.transform();
- //------------------------------------------------------------------------------------
-
- while(glfwWindowShouldClose(windowID) == GL11.GL_FALSE){
-
- if(System.currentTimeMillis() - previousTicks >= 1000/60){//Update TICKS
- glfwPollEvents();
- Input.update();
- game.update();
- previousTicks = System.currentTimeMillis();
- delta = (float)(System.currentTimeMillis() - previous)/1000.0f;
- previous = System.currentTimeMillis();
- TICKS++;
- }else{//Update FPS
- DisplayManager.clear();
- DisplayManager.preRender3D();
- DisplayManager.render3D();
- DisplayManager.preRender2D();
- DisplayManager.render2D();
- DisplayManager.preRenderGUI();
- DisplayManager.renderGUI();
- glfwSwapBuffers(windowID);
- FPS++;
- }
-
- if(System.currentTimeMillis() - previousInfo >= 1000){
- glfwSetWindowTitle(windowID, TITLE + " | FPS:" + FPS + " TICKS:" + TICKS);
- FPS = 0;
- TICKS = 0;
- previousInfo = System.currentTimeMillis();
- }
- }
-
- Audio.destroy();
- glfwDestroyWindow(windowID);
- glfwTerminate();
- }
-
-}
+package fr.technicalgames;
+
+//http://www.tomdalling.com/blog/modern-opengl/08-even-more-lighting-directional-lights-spotlights-multiple-lights/
+
+import static org.lwjgl.glfw.GLFW.*;
+import static org.lwjgl.opengl.GL11.*;
+import static org.lwjgl.system.MemoryUtil.*;
+
+import org.lwjgl.glfw.*;
+import org.lwjgl.opengl.*;
+
+import fr.technicalgames.audio.*;
+import fr.technicalgames.game.*;
+import fr.technicalgames.input.*;
+import fr.technicalgames.math.*;
+import fr.technicalgames.render.*;
+
+public class Main {
+
+ //Valeur de la fenetre
+ public static final int WIDTH = 800,HEIGHT = 600;
+ public static final String TITLE = "Test Shader OpenGL";
+
+ //Variable pour la gestion de la fenetre
+ public static long windowID = 0;
+ public static float mousePositionX = 0,mousePositionY = 0,dMouseX = 0,dMouseY = 0;
+ public static GLFWErrorCallback errorCallback;
+
+ //variable du moteur du jeu
+ public static float delta = 0;
+ public static Game game;
+ public static long previous = System.currentTimeMillis(),previousInfo = System.currentTimeMillis(),previousTicks = System.currentTimeMillis();
+ public static int FPS = 0,TICKS = 0;
+
+ public static void main(String[] args) throws Exception {
+ //Creation de la fenetre
+ //------------------------------------------------------------------------------------
+ errorCallback = new GLFWErrorCallback() {
+ public void invoke(int error, long description) {
+ System.err.println("ID : " + error + " | Description :" + description);
+ }
+ };
+// glfwSetErrorCallback(errorCallback);
+
+ if(glfwInit() != GL11.GL_TRUE)throw new Exception("GLFW not init");
+ glfwDefaultWindowHints();
+ glfwWindowHint(GLFW_VISIBLE, GL11.GL_FALSE);
+ glfwWindowHint(GLFW_RESIZABLE, GL11.GL_FALSE);
+ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
+ glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
+ glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
+ glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
+ windowID = glfwCreateWindow(WIDTH,HEIGHT,TITLE,NULL,NULL);
+ GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
+ glfwSetWindowPos(windowID,(vidmode.width()-WIDTH)/2,(vidmode.height()-HEIGHT)/2);
+ glfwShowWindow(windowID);
+ glfwMakeContextCurrent(windowID);
+ GL.createCapabilities();
+ System.out.println("OpenGL Version :" + glGetString(GL_VERSION));
+ System.out.println("GLSL Shader Version :" + glGetString(GL20.GL_SHADING_LANGUAGE_VERSION));
+ //------------------------------------------------------------------------------------
+
+ //Creation du device audio
+ //------------------------------------------------------------------------------------
+ Audio.create();
+ //------------------------------------------------------------------------------------
+
+ //initialisation
+ //------------------------------------------------------------------------------------
+ Input.init();
+ game = new MainGame();
+
+ Camera.rot = new Vector3f(-3.0f,-338.0f,0.0f);
+ Camera.pos = new Vector3f(1.5242399f,0.0f,-13.456063f);
+ Camera.transform();
+ //------------------------------------------------------------------------------------
+
+ while(glfwWindowShouldClose(windowID) == GL11.GL_FALSE){
+
+ if(System.currentTimeMillis() - previousTicks >= 1000/60){//Update TICKS
+ glfwPollEvents();
+ Input.update();
+ game.update();
+ previousTicks = System.currentTimeMillis();
+ delta = (float)(System.currentTimeMillis() - previous)/1000.0f;
+ previous = System.currentTimeMillis();
+ TICKS++;
+ }else{//Update FPS
+ DisplayManager.clear();
+ DisplayManager.preRender3D();
+ DisplayManager.render3D();
+ DisplayManager.preRender2D();
+ DisplayManager.render2D();
+ DisplayManager.preRenderGUI();
+ DisplayManager.renderGUI();
+ glfwSwapBuffers(windowID);
+ FPS++;
+ }
+
+ if(System.currentTimeMillis() - previousInfo >= 1000){
+ glfwSetWindowTitle(windowID, TITLE + " | FPS:" + FPS + " TICKS:" + TICKS);
+ FPS = 0;
+ TICKS = 0;
+ previousInfo = System.currentTimeMillis();
+ }
+ }
+
+ Audio.destroy();
+ glfwDestroyWindow(windowID);
+ glfwTerminate();
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/audio/Audio.java b/src/fr/technicalgames/audio/Audio.java
similarity index 96%
rename from Diffuse light/src/fr/technicalgames/audio/Audio.java
rename to src/fr/technicalgames/audio/Audio.java
index 7013f65..31e95ce 100644
--- a/Diffuse light/src/fr/technicalgames/audio/Audio.java
+++ b/src/fr/technicalgames/audio/Audio.java
@@ -1,341 +1,341 @@
-package fr.technicalgames.audio;
-
-import static org.lwjgl.openal.AL10.*;
-import static org.lwjgl.openal.ALC10.*;
-import static org.lwjgl.openal.ALC11.*;
-import static org.lwjgl.openal.ALUtil.*;
-import static org.lwjgl.stb.STBVorbis.*;
-import static org.lwjgl.system.MemoryUtil.*;
-
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-
-import javax.sound.sampled.*;
-
-import org.lwjgl.*;
-import org.lwjgl.openal.*;
-
-
-import org.lwjgl.stb.STBVorbisInfo;
-
-public abstract class Audio {
-
- //Variables global
- //------------------------------------------------------
- public static ALDevice device;
- public static ALCCapabilities caps;
- public static ALContext context;
- public static final int INITIAL_STATE = 4113,PAUSED_STATE = 4115,STOPPED_STATE = 4116,PLAYING_STATE = 4114;
- //------------------------------------------------------
-
- //Variable de l'objet audio ou du son a lire
- //------------------------------------------------------
- private int buffer,source;
- private String fileName;
- private String format;
- //------------------------------------------------------
-
- //Fonction global
- //------------------------------------------------------
- public static void create(){
- device = ALDevice.create(null);
- if ( device == null )
- throw new IllegalStateException("Failed to open the default device.");
- caps = device.getCapabilities();
- System.out.println("---------------------------- Create Audio Device -------------------------------------");
- System.out.println("OpenALC10: " + caps.OpenALC10);
- System.out.println("OpenALC11: " + caps.OpenALC11);
- System.out.println("caps.ALC_EXT_EFX = " + caps.ALC_EXT_EFX);
-
- String defaultDeviceSpecifier = alcGetString(0L, ALC_DEFAULT_DEVICE_SPECIFIER);
- System.out.println("Default device: " + defaultDeviceSpecifier);
-
- context = ALContext.create(device);
-
- System.out.println("ALC_FREQUENCY: " + alcGetInteger(device.address(), ALC_FREQUENCY) + "Hz");
- System.out.println("ALC_REFRESH: " + alcGetInteger(device.address(), ALC_REFRESH) + "Hz");
- System.out.println("ALC_SYNC: " + (alcGetInteger(device.address(), ALC_SYNC) == ALC_TRUE));
- System.out.println("ALC_MONO_SOURCES: " + alcGetInteger(device.address(), ALC_MONO_SOURCES));
- System.out.println("ALC_STEREO_SOURCES: " + alcGetInteger(device.address(), ALC_STEREO_SOURCES));
- System.out.println("---------------------------------------------------------------------------------------");
- }
-
- public static void destroy(){
- context.destroy();
- device.destroy();
- }
- //------------------------------------------------------
-
- //Fonction de l'objet audio ou du son a lire
- //------------------------------------------------------
-
- public Audio(String fileName) throws Exception{
- this.fileName = fileName;
- setSound();
- }
-
- private void setSound() throws Exception{
- if(fileName.endsWith(".ogg")){
- loadOGGFormat();
- format = "OGG";
- }else if(fileName.endsWith(".wav")){
- loadWavFormat();
- format = "WAV";
- }else{
- throw new Exception("Format not supported !");
- }
- alSourcei(source, AL_BUFFER, buffer);
- checkALError();
- int size = alGetBufferi(buffer,AL_SIZE);
- int bits = alGetBufferi(buffer, AL_BITS);
- int channels = alGetBufferi(buffer, AL_CHANNELS);
- int freq = alGetBufferi(buffer, AL_FREQUENCY);
- System.out.println(fileName + " loaded !" + " | TIME : " + (size/channels/(bits/8)/freq) + "s | BITS : " + bits + " | CHANNELS : " + channels + " | FREQUENCE : " + freq + " FORMAT : " + format);
- }
-
- public void loadWavFormat() throws Exception{
- AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(fileName)));
- AudioFormat audioformat = ais.getFormat();
-
- // get channels
- int channels = 0;
- if (audioformat.getChannels() == 1) {
- if (audioformat.getSampleSizeInBits() == 8) {
- channels = AL10.AL_FORMAT_MONO8;
- } else if (audioformat.getSampleSizeInBits() == 16) {
- channels = AL10.AL_FORMAT_MONO16;
- } else {
- assert false : "Illegal sample size";
- }
- } else if (audioformat.getChannels() == 2) {
- if (audioformat.getSampleSizeInBits() == 8) {
- channels = AL10.AL_FORMAT_STEREO8;
- } else if (audioformat.getSampleSizeInBits() == 16) {
- channels = AL10.AL_FORMAT_STEREO16;
- } else {
- assert false : "Illegal sample size";
- }
- } else {
- assert false : "Only mono or stereo is supported";
- }
-
- int available = ais.available();
- if(available <= 0) {
- available = ais.getFormat().getChannels() * (int) ais.getFrameLength() * ais.getFormat().getSampleSizeInBits() / 8;
- }
- byte[] buf = new byte[ais.available()];
- int read = 0, total = 0;
- while ((read = ais.read(buf, total, buf.length - total)) != -1
- && total < buf.length) {
- total += read;
- }
- byte[] audio_bytes = buf;
- boolean two_bytes_data = audioformat.getSampleSizeInBits() == 16;
- ByteOrder order = audioformat.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
- ByteBuffer dest = ByteBuffer.allocateDirect(audio_bytes.length);
- dest.order(ByteOrder.nativeOrder());
- ByteBuffer src = ByteBuffer.wrap(audio_bytes);
- src.order(order);
- if (two_bytes_data) {
- ShortBuffer dest_short = dest.asShortBuffer();
- ShortBuffer src_short = src.asShortBuffer();
- while (src_short.hasRemaining())
- dest_short.put(src_short.get());
- } else {
- while (src.hasRemaining())
- dest.put(src.get());
- }
- dest.rewind();
-
- this.buffer = alGenBuffers();
- this.source = alGenSources();
- alBufferData(this.buffer, channels, dest, (int)audioformat.getSampleRate());
- dest.clear();
- }
-
- public void loadOGGFormat(){
- STBVorbisInfo info = STBVorbisInfo.malloc();
- ByteBuffer buff = BufferUtils.createByteBuffer(0);
- //lecture du fichier
- //----------------------------------------------------------------------------------------------------------------
- try {
- File file = new File(fileName);
- if ( file.isFile() ) {
- FileInputStream fis = new FileInputStream(file);
- FileChannel fc = fis.getChannel();
- buff = BufferUtils.createByteBuffer((int)fc.size() + 1);
-
- while ( fc.read(buff) != -1 ) ;
-
- fis.close();
- fc.close();
- } else {
- System.err.println("File not found !");
- return;
- }
-
- buff.flip();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- //----------------------------------------------------------------------------------------------------------------
-
- IntBuffer error = BufferUtils.createIntBuffer(1);
- long decoder = stb_vorbis_open_memory(buff, error, null);
- if ( decoder == NULL )
- throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + error.get(0));
-
- stb_vorbis_get_info(decoder, info);
-
- int channels = info.channels();
-
- stb_vorbis_seek_start(decoder);
- int lengthSamples = stb_vorbis_stream_length_in_samples(decoder);
-
- ByteBuffer pcm = BufferUtils.createByteBuffer(lengthSamples * 2 * channels);
-
- stb_vorbis_get_samples_short_interleaved(decoder, channels, pcm, lengthSamples);
- stb_vorbis_close(decoder);
-
- buffer = alGenBuffers();
- checkALError();
-
- source = alGenSources();
- checkALError();
-
- if(channels == 1)alBufferData(buffer, AL_FORMAT_MONO16, pcm, info.sample_rate());
- else alBufferData(buffer, AL_FORMAT_STEREO16, pcm, info.sample_rate());
- checkALError();
- }
-
- public void playSound(){
- if(source == 0 || buffer == 0) return;
- alSourcePlay(source);
- }
-
- public int getPosition(){
- return alGetSourcei(source, AL_POSITION);
- }
-
- public int getDurationInSeconds(){
- if(source == 0 || buffer == 0) return 0;
- int size = alGetBufferi(buffer,AL_SIZE);
- int bits = alGetBufferi(buffer, AL_BITS);
- int channels = alGetBufferi(buffer, AL_CHANNELS);
- int freq = alGetBufferi(buffer, AL_FREQUENCY);
- return size/channels/(bits/8)/freq;
- }
-
- public int getStateSound(){
- if(source == 0 || buffer == 0) return 0;
- return alGetSourcei(source, AL_SOURCE_STATE);
- }
-
- public boolean isStopped(){
- if(source == 0 || buffer == 0) return false;
- if(alGetSourcei(source, AL_SOURCE_STATE) == STOPPED_STATE)return true;
- else return false;
- }
-
- public boolean isPaused(){
- if(source == 0 || buffer == 0) return false;
- if(alGetSourcei(source, AL_SOURCE_STATE) == PAUSED_STATE)return true;
- else return false;
- }
-
- public boolean isPlaying(){
- if(source == 0 || buffer == 0) return false;
- if(alGetSourcei(source, AL_SOURCE_STATE) == PLAYING_STATE)return true;
- else return false;
- }
-
- public boolean isInitial(){
- if(source == 0 || buffer == 0) return false;
- if(alGetSourcei(source, AL_SOURCE_STATE) == INITIAL_STATE)return true;
- else return false;
- }
-
- public void stopSound(){
- if(source == 0 || buffer == 0) return;
- alSourceStop(source);
- }
-
- public void pauseSound(){
- if(source == 0 || buffer == 0) return;
- alSourcePause(source);
- }
-
- public void rewindSound(){
- if(source == 0 || buffer == 0) return;
- alSourceRewind(source);
- }
-
- public void setGain(float gain){
- if(source == 0 || buffer == 0) return;
- if(gain > 1.0f)gain = 1.0f;
- if(gain < 0.0f)gain = 0.0f;
- alSourcef(source, AL_GAIN, gain);
- }
-
- public void setPitch(float pitch){
- if(source == 0 || buffer == 0) return;
- if(pitch < 0.0f)pitch = 0.0f;
- alSourcef(source, AL_PITCH, pitch);
- }
-
-
- public float getGain(){
- if(source == 0 || buffer == 0) return 0;
- return alGetSourcef(source, AL_GAIN);
- }
-
- public float getPitch(){
- if(source == 0 || buffer == 0) return 0;
- return alGetSourcef(source, AL_PITCH);
- }
-
- public void setLooping(boolean looping){
- if(source == 0 || buffer == 0) return;
- if(looping){
- alSourcef(source, AL_LOOPING, AL_TRUE);
- }else{
- alSourcef(source, AL_LOOPING, AL_FALSE);
- }
- }
-
- public void destroySound(){
- alDeleteSources(source);
- alDeleteBuffers(buffer);
- source = 0;
- buffer = 0;
- }
-
- public String getFileName() {
- return fileName;
- }
-
- public void setFileName(String fileName) throws Exception {
- this.fileName = fileName;
- destroySound();
- setSound();
- }
-
- public int getBuffer() {
- return buffer;
- }
-
- public void setBuffer(int buffer) {
- this.buffer = buffer;
- }
-
- public int getSource() {
- return source;
- }
-
- public void setSource(int source) {
- this.source = source;
- }
- //------------------------------------------------------
-
-}
+package fr.technicalgames.audio;
+
+import static org.lwjgl.openal.AL10.*;
+import static org.lwjgl.openal.ALC10.*;
+import static org.lwjgl.openal.ALC11.*;
+import static org.lwjgl.openal.ALUtil.*;
+import static org.lwjgl.stb.STBVorbis.*;
+import static org.lwjgl.system.MemoryUtil.*;
+
+import java.io.*;
+import java.nio.*;
+import java.nio.channels.*;
+
+import javax.sound.sampled.*;
+
+import org.lwjgl.*;
+import org.lwjgl.openal.*;
+
+
+import org.lwjgl.stb.STBVorbisInfo;
+
+public abstract class Audio {
+
+ //Variables global
+ //------------------------------------------------------
+ public static ALDevice device;
+ public static ALCCapabilities caps;
+ public static ALContext context;
+ public static final int INITIAL_STATE = 4113,PAUSED_STATE = 4115,STOPPED_STATE = 4116,PLAYING_STATE = 4114;
+ //------------------------------------------------------
+
+ //Variable de l'objet audio ou du son a lire
+ //------------------------------------------------------
+ private int buffer,source;
+ private String fileName;
+ private String format;
+ //------------------------------------------------------
+
+ //Fonction global
+ //------------------------------------------------------
+ public static void create(){
+ device = ALDevice.create(null);
+ if ( device == null )
+ throw new IllegalStateException("Failed to open the default device.");
+ caps = device.getCapabilities();
+ System.out.println("---------------------------- Create Audio Device -------------------------------------");
+ System.out.println("OpenALC10: " + caps.OpenALC10);
+ System.out.println("OpenALC11: " + caps.OpenALC11);
+ System.out.println("caps.ALC_EXT_EFX = " + caps.ALC_EXT_EFX);
+
+ String defaultDeviceSpecifier = alcGetString(0L, ALC_DEFAULT_DEVICE_SPECIFIER);
+ System.out.println("Default device: " + defaultDeviceSpecifier);
+
+ context = ALContext.create(device);
+
+ System.out.println("ALC_FREQUENCY: " + alcGetInteger(device.address(), ALC_FREQUENCY) + "Hz");
+ System.out.println("ALC_REFRESH: " + alcGetInteger(device.address(), ALC_REFRESH) + "Hz");
+ System.out.println("ALC_SYNC: " + (alcGetInteger(device.address(), ALC_SYNC) == ALC_TRUE));
+ System.out.println("ALC_MONO_SOURCES: " + alcGetInteger(device.address(), ALC_MONO_SOURCES));
+ System.out.println("ALC_STEREO_SOURCES: " + alcGetInteger(device.address(), ALC_STEREO_SOURCES));
+ System.out.println("---------------------------------------------------------------------------------------");
+ }
+
+ public static void destroy(){
+ context.destroy();
+ device.destroy();
+ }
+ //------------------------------------------------------
+
+ //Fonction de l'objet audio ou du son a lire
+ //------------------------------------------------------
+
+ public Audio(String fileName) throws Exception{
+ this.fileName = fileName;
+ setSound();
+ }
+
+ private void setSound() throws Exception{
+ if(fileName.endsWith(".ogg")){
+ loadOGGFormat();
+ format = "OGG";
+ }else if(fileName.endsWith(".wav")){
+ loadWavFormat();
+ format = "WAV";
+ }else{
+ throw new Exception("Format not supported !");
+ }
+ alSourcei(source, AL_BUFFER, buffer);
+ checkALError();
+ int size = alGetBufferi(buffer,AL_SIZE);
+ int bits = alGetBufferi(buffer, AL_BITS);
+ int channels = alGetBufferi(buffer, AL_CHANNELS);
+ int freq = alGetBufferi(buffer, AL_FREQUENCY);
+ System.out.println(fileName + " loaded !" + " | TIME : " + (size/channels/(bits/8)/freq) + "s | BITS : " + bits + " | CHANNELS : " + channels + " | FREQUENCE : " + freq + " FORMAT : " + format);
+ }
+
+ public void loadWavFormat() throws Exception{
+ AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(fileName)));
+ AudioFormat audioformat = ais.getFormat();
+
+ // get channels
+ int channels = 0;
+ if (audioformat.getChannels() == 1) {
+ if (audioformat.getSampleSizeInBits() == 8) {
+ channels = AL10.AL_FORMAT_MONO8;
+ } else if (audioformat.getSampleSizeInBits() == 16) {
+ channels = AL10.AL_FORMAT_MONO16;
+ } else {
+ assert false : "Illegal sample size";
+ }
+ } else if (audioformat.getChannels() == 2) {
+ if (audioformat.getSampleSizeInBits() == 8) {
+ channels = AL10.AL_FORMAT_STEREO8;
+ } else if (audioformat.getSampleSizeInBits() == 16) {
+ channels = AL10.AL_FORMAT_STEREO16;
+ } else {
+ assert false : "Illegal sample size";
+ }
+ } else {
+ assert false : "Only mono or stereo is supported";
+ }
+
+ int available = ais.available();
+ if(available <= 0) {
+ available = ais.getFormat().getChannels() * (int) ais.getFrameLength() * ais.getFormat().getSampleSizeInBits() / 8;
+ }
+ byte[] buf = new byte[ais.available()];
+ int read = 0, total = 0;
+ while ((read = ais.read(buf, total, buf.length - total)) != -1
+ && total < buf.length) {
+ total += read;
+ }
+ byte[] audio_bytes = buf;
+ boolean two_bytes_data = audioformat.getSampleSizeInBits() == 16;
+ ByteOrder order = audioformat.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
+ ByteBuffer dest = ByteBuffer.allocateDirect(audio_bytes.length);
+ dest.order(ByteOrder.nativeOrder());
+ ByteBuffer src = ByteBuffer.wrap(audio_bytes);
+ src.order(order);
+ if (two_bytes_data) {
+ ShortBuffer dest_short = dest.asShortBuffer();
+ ShortBuffer src_short = src.asShortBuffer();
+ while (src_short.hasRemaining())
+ dest_short.put(src_short.get());
+ } else {
+ while (src.hasRemaining())
+ dest.put(src.get());
+ }
+ dest.rewind();
+
+ this.buffer = alGenBuffers();
+ this.source = alGenSources();
+ alBufferData(this.buffer, channels, dest, (int)audioformat.getSampleRate());
+ dest.clear();
+ }
+
+ public void loadOGGFormat(){
+ STBVorbisInfo info = STBVorbisInfo.malloc();
+ ByteBuffer buff = BufferUtils.createByteBuffer(0);
+ //lecture du fichier
+ //----------------------------------------------------------------------------------------------------------------
+ try {
+ File file = new File(fileName);
+ if ( file.isFile() ) {
+ FileInputStream fis = new FileInputStream(file);
+ FileChannel fc = fis.getChannel();
+ buff = BufferUtils.createByteBuffer((int)fc.size() + 1);
+
+ while ( fc.read(buff) != -1 ) ;
+
+ fis.close();
+ fc.close();
+ } else {
+ System.err.println("File not found !");
+ return;
+ }
+
+ buff.flip();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //----------------------------------------------------------------------------------------------------------------
+
+ IntBuffer error = BufferUtils.createIntBuffer(1);
+ long decoder = stb_vorbis_open_memory(buff, error, null);
+ if ( decoder == NULL )
+ throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + error.get(0));
+
+ stb_vorbis_get_info(decoder, info);
+
+ int channels = info.channels();
+
+ stb_vorbis_seek_start(decoder);
+ int lengthSamples = stb_vorbis_stream_length_in_samples(decoder);
+
+ ByteBuffer pcm = BufferUtils.createByteBuffer(lengthSamples * 2 * channels);
+
+ stb_vorbis_get_samples_short_interleaved(decoder, channels, pcm, lengthSamples);
+ stb_vorbis_close(decoder);
+
+ buffer = alGenBuffers();
+ checkALError();
+
+ source = alGenSources();
+ checkALError();
+
+ if(channels == 1)alBufferData(buffer, AL_FORMAT_MONO16, pcm, info.sample_rate());
+ else alBufferData(buffer, AL_FORMAT_STEREO16, pcm, info.sample_rate());
+ checkALError();
+ }
+
+ public void playSound(){
+ if(source == 0 || buffer == 0) return;
+ alSourcePlay(source);
+ }
+
+ public int getPosition(){
+ return alGetSourcei(source, AL_POSITION);
+ }
+
+ public int getDurationInSeconds(){
+ if(source == 0 || buffer == 0) return 0;
+ int size = alGetBufferi(buffer,AL_SIZE);
+ int bits = alGetBufferi(buffer, AL_BITS);
+ int channels = alGetBufferi(buffer, AL_CHANNELS);
+ int freq = alGetBufferi(buffer, AL_FREQUENCY);
+ return size/channels/(bits/8)/freq;
+ }
+
+ public int getStateSound(){
+ if(source == 0 || buffer == 0) return 0;
+ return alGetSourcei(source, AL_SOURCE_STATE);
+ }
+
+ public boolean isStopped(){
+ if(source == 0 || buffer == 0) return false;
+ if(alGetSourcei(source, AL_SOURCE_STATE) == STOPPED_STATE)return true;
+ else return false;
+ }
+
+ public boolean isPaused(){
+ if(source == 0 || buffer == 0) return false;
+ if(alGetSourcei(source, AL_SOURCE_STATE) == PAUSED_STATE)return true;
+ else return false;
+ }
+
+ public boolean isPlaying(){
+ if(source == 0 || buffer == 0) return false;
+ if(alGetSourcei(source, AL_SOURCE_STATE) == PLAYING_STATE)return true;
+ else return false;
+ }
+
+ public boolean isInitial(){
+ if(source == 0 || buffer == 0) return false;
+ if(alGetSourcei(source, AL_SOURCE_STATE) == INITIAL_STATE)return true;
+ else return false;
+ }
+
+ public void stopSound(){
+ if(source == 0 || buffer == 0) return;
+ alSourceStop(source);
+ }
+
+ public void pauseSound(){
+ if(source == 0 || buffer == 0) return;
+ alSourcePause(source);
+ }
+
+ public void rewindSound(){
+ if(source == 0 || buffer == 0) return;
+ alSourceRewind(source);
+ }
+
+ public void setGain(float gain){
+ if(source == 0 || buffer == 0) return;
+ if(gain > 1.0f)gain = 1.0f;
+ if(gain < 0.0f)gain = 0.0f;
+ alSourcef(source, AL_GAIN, gain);
+ }
+
+ public void setPitch(float pitch){
+ if(source == 0 || buffer == 0) return;
+ if(pitch < 0.0f)pitch = 0.0f;
+ alSourcef(source, AL_PITCH, pitch);
+ }
+
+
+ public float getGain(){
+ if(source == 0 || buffer == 0) return 0;
+ return alGetSourcef(source, AL_GAIN);
+ }
+
+ public float getPitch(){
+ if(source == 0 || buffer == 0) return 0;
+ return alGetSourcef(source, AL_PITCH);
+ }
+
+ public void setLooping(boolean looping){
+ if(source == 0 || buffer == 0) return;
+ if(looping){
+ alSourcef(source, AL_LOOPING, AL_TRUE);
+ }else{
+ alSourcef(source, AL_LOOPING, AL_FALSE);
+ }
+ }
+
+ public void destroySound(){
+ alDeleteSources(source);
+ alDeleteBuffers(buffer);
+ source = 0;
+ buffer = 0;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) throws Exception {
+ this.fileName = fileName;
+ destroySound();
+ setSound();
+ }
+
+ public int getBuffer() {
+ return buffer;
+ }
+
+ public void setBuffer(int buffer) {
+ this.buffer = buffer;
+ }
+
+ public int getSource() {
+ return source;
+ }
+
+ public void setSource(int source) {
+ this.source = source;
+ }
+ //------------------------------------------------------
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/audio/Sound3D.java b/src/fr/technicalgames/audio/Sound3D.java
similarity index 94%
rename from Diffuse light/src/fr/technicalgames/audio/Sound3D.java
rename to src/fr/technicalgames/audio/Sound3D.java
index fec9da3..b2f4c0e 100644
--- a/Diffuse light/src/fr/technicalgames/audio/Sound3D.java
+++ b/src/fr/technicalgames/audio/Sound3D.java
@@ -1,11 +1,11 @@
-package fr.technicalgames.audio;
-
-import fr.technicalgames.math.*;
-
-public class Sound3D extends Audio{
-
- public Sound3D(String fileName,Vector3f position) throws Exception {
- super(fileName);
- }
-
-}
+package fr.technicalgames.audio;
+
+import fr.technicalgames.math.*;
+
+public class Sound3D extends Audio{
+
+ public Sound3D(String fileName,Vector3f position) throws Exception {
+ super(fileName);
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/game/Game.java b/src/fr/technicalgames/game/Game.java
similarity index 96%
rename from Diffuse light/src/fr/technicalgames/game/Game.java
rename to src/fr/technicalgames/game/Game.java
index a366624..c87c04a 100644
--- a/Diffuse light/src/fr/technicalgames/game/Game.java
+++ b/src/fr/technicalgames/game/Game.java
@@ -1,26 +1,26 @@
-package fr.technicalgames.game;
-
-import java.util.*;
-
-import fr.technicalgames.light.*;
-import fr.technicalgames.render.*;
-
-public abstract class Game {
-
- public static ArrayList assets = new ArrayList();
- public static ArrayList lights = new ArrayList();
-
- public Game(){
- init();
- System.out.println(this.getClass().getSimpleName() + " loaded with " + assets.size() + " assets and with " + lights.size() + " lights !");
- }
-
- public abstract void init();
- public abstract void update();
- public abstract void render2D();
- public abstract void render3D();
- public abstract void renderGUI();
- public abstract void destroy();
-
-
-}
+package fr.technicalgames.game;
+
+import java.util.*;
+
+import fr.technicalgames.light.*;
+import fr.technicalgames.render.*;
+
+public abstract class Game {
+
+ public static ArrayList assets = new ArrayList();
+ public static ArrayList lights = new ArrayList();
+
+ public Game(){
+ init();
+ System.out.println(this.getClass().getSimpleName() + " loaded with " + assets.size() + " assets and with " + lights.size() + " lights !");
+ }
+
+ public abstract void init();
+ public abstract void update();
+ public abstract void render2D();
+ public abstract void render3D();
+ public abstract void renderGUI();
+ public abstract void destroy();
+
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/game/MainGame.java b/src/fr/technicalgames/game/MainGame.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/game/MainGame.java
rename to src/fr/technicalgames/game/MainGame.java
index 2adfe7e..de6005a 100644
--- a/Diffuse light/src/fr/technicalgames/game/MainGame.java
+++ b/src/fr/technicalgames/game/MainGame.java
@@ -1,77 +1,77 @@
-package fr.technicalgames.game;
-
-import fr.technicalgames.*;
-import fr.technicalgames.light.*;
-import fr.technicalgames.math.*;
-import fr.technicalgames.render.*;
-
-public class MainGame extends Game{
-
- private float value = 0;
-
- @Override
- public void init() {
-
- lights.add(new SpotLight(new Vector3f(-4,0,10),new Vector3f(2,2,2),0.1f,0.0f,15.0f,new Vector3f(0,0,-1)));
- lights.add(new DirectionalLight(new Vector3f(4,5,-10), new Vector3f(0.4f,0.3f,0.1f), 0.06f));
-
-
- Asset as = new Asset();
- as.transform = (new Matrix4f());
- assets.add(as);
- as = new Asset();
- as.transform = (new Matrix4f()).tranlate(0, -4, 0).scale(1, 2, 1);
- assets.add(as);
- as = new Asset();
- as.transform = (new Matrix4f()).tranlate(-8,0,0).scale(1, 6, 1);
- assets.add(as);
- as = new Asset();
- as.transform = (new Matrix4f()).tranlate(-4,0,0).scale(1, 6, 1);
- assets.add(as);
- as = new Asset();
- as.transform = (new Matrix4f()).tranlate(-6,0,0).scale(2,1,0.8f);
- assets.add(as);
- as = new Asset();
- as.transform = (new Matrix4f()).tranlate(-9, -10, -1).scale(20, .5f, 20);
- assets.add(as);
- as = null;
- }
-
- @Override
- public void update() {
- Camera.update();
- Camera.transform();
-
- lights.get(0).position.y = Mathf.cos(value) * 6f;
- lights.get(0).position.x = Mathf.sin(value) * 3f - 4f;
- value += Main.delta * 1.0f;
- }
-
- @Override
- public void render2D() {
-
- }
-
- @Override
- public void render3D() {
- for(Asset a : assets){
- a.render(lights);
- }
- }
-
- @Override
- public void renderGUI() {
-
- }
-
- @Override
- public void destroy() {
- for(Asset a : assets){
- a.destroy();
- }
- for(Light l : lights){
- l.destroy();
- }
- }
-
-}
+package fr.technicalgames.game;
+
+import fr.technicalgames.*;
+import fr.technicalgames.light.*;
+import fr.technicalgames.math.*;
+import fr.technicalgames.render.*;
+
+public class MainGame extends Game{
+
+ private float value = 0;
+
+ @Override
+ public void init() {
+
+ lights.add(new SpotLight(new Vector3f(-4,0,10),new Vector3f(2,2,2),0.1f,0.0f,15.0f,new Vector3f(0,0,-1)));
+ lights.add(new DirectionalLight(new Vector3f(4,5,-10), new Vector3f(0.4f,0.3f,0.1f), 0.06f));
+
+
+ Asset as = new Asset();
+ as.transform = (new Matrix4f());
+ assets.add(as);
+ as = new Asset();
+ as.transform = (new Matrix4f()).tranlate(0, -4, 0).scale(1, 2, 1);
+ assets.add(as);
+ as = new Asset();
+ as.transform = (new Matrix4f()).tranlate(-8,0,0).scale(1, 6, 1);
+ assets.add(as);
+ as = new Asset();
+ as.transform = (new Matrix4f()).tranlate(-4,0,0).scale(1, 6, 1);
+ assets.add(as);
+ as = new Asset();
+ as.transform = (new Matrix4f()).tranlate(-6,0,0).scale(2,1,0.8f);
+ assets.add(as);
+ as = new Asset();
+ as.transform = (new Matrix4f()).tranlate(-9, -10, -1).scale(20, .5f, 20);
+ assets.add(as);
+ as = null;
+ }
+
+ @Override
+ public void update() {
+ Camera.update();
+ Camera.transform();
+
+ lights.get(0).position.y = Mathf.cos(value) * 6f;
+ lights.get(0).position.x = Mathf.sin(value) * 3f - 4f;
+ value += Main.delta * 1.0f;
+ }
+
+ @Override
+ public void render2D() {
+
+ }
+
+ @Override
+ public void render3D() {
+ for(Asset a : assets){
+ a.render(lights);
+ }
+ }
+
+ @Override
+ public void renderGUI() {
+
+ }
+
+ @Override
+ public void destroy() {
+ for(Asset a : assets){
+ a.destroy();
+ }
+ for(Light l : lights){
+ l.destroy();
+ }
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/input/IO.java b/src/fr/technicalgames/input/IO.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/input/IO.java
rename to src/fr/technicalgames/input/IO.java
index eefd3c3..44ed161 100644
--- a/Diffuse light/src/fr/technicalgames/input/IO.java
+++ b/src/fr/technicalgames/input/IO.java
@@ -1,17 +1,17 @@
-package fr.technicalgames.input;
-import java.io.*;
-
-public class IO {
-
- public static String loadFile(String path) throws Exception{
- String r = "";
- BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
- String buffer = "";
- while ((buffer = reader.readLine()) != null) {
- r += buffer + "\n";
- }
- reader.close();
- return r;
- }
-
-}
+package fr.technicalgames.input;
+import java.io.*;
+
+public class IO {
+
+ public static String loadFile(String path) throws Exception{
+ String r = "";
+ BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
+ String buffer = "";
+ while ((buffer = reader.readLine()) != null) {
+ r += buffer + "\n";
+ }
+ reader.close();
+ return r;
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/input/Input.java b/src/fr/technicalgames/input/Input.java
similarity index 96%
rename from Diffuse light/src/fr/technicalgames/input/Input.java
rename to src/fr/technicalgames/input/Input.java
index c1ee0fe..79fa83b 100644
--- a/Diffuse light/src/fr/technicalgames/input/Input.java
+++ b/src/fr/technicalgames/input/Input.java
@@ -1,245 +1,245 @@
-package fr.technicalgames.input;
-
-
-import static org.lwjgl.glfw.GLFW.*;
-
-import java.util.*;
-import java.util.Map.*;
-
-import org.lwjgl.glfw.*;
-
-import fr.technicalgames.*;
-import fr.technicalgames.math.*;
-
-public class Input{
-
- public static GLFWScrollCallback scroll;
- public static GLFWCursorPosCallback mousePos;
-
- private static Vector2f mousePosition = new Vector2f();
- private static Vector2f dMouse = new Vector2f();
- private static Vector2f previousDMouse = new Vector2f();
-
- public static final int NONE = 0,PRESSED = 1,RELEASED = 2,REPEATED = 3,UP = 4,DOWN = 5,
- NBRE_KEY = 0x15D,NBRE_BUTTON = 10,
- MOUSE_OFFSET = NBRE_KEY + 1,MOUSE_WHEEL_OFFSET = MOUSE_OFFSET + 1;
-
- private static HashMap state = new HashMap();
-
- private static double ywheel = 0;
-
- public static void init(){
- glfwSetScrollCallback(Main.windowID, scroll = new GLFWScrollCallback() {
- public void invoke(long window, double xoffset, double yoffset) {
- scroll(window, xoffset, yoffset);
- }
- });
- glfwSetCursorPosCallback(Main.windowID, mousePos = new GLFWCursorPosCallback() {
- public void invoke(long window, double xpos, double ypos) {
- mousepos(window, xpos, ypos);
- }
- });
- for(int i = 0;i < NBRE_KEY;i++){
- state.put(i, NONE);
- }
- for(int i = 0;i < NBRE_BUTTON;i++){
- state.put(i + MOUSE_OFFSET, NONE);
- }
- state.put(MOUSE_WHEEL_OFFSET, NONE);
- }
-
- public static void update(){
- for(Entry set : state.entrySet()){
- int i = set.getKey();
- int st = set.getValue();
- if(i > -1 && i < NBRE_KEY){
- if(glfwGetKey(Main.windowID, i) == 0 && st == NONE)continue;
- if(glfwGetKey(Main.windowID, i) == 1 && st == NONE){
- state.replace(i, PRESSED);
- }else if(glfwGetKey(Main.windowID, i) == 1 && st == PRESSED){
- state.replace(i, REPEATED);
- }else if(glfwGetKey(Main.windowID, i) == 0 && (st == PRESSED || st == REPEATED)){
- state.replace(i, RELEASED);
- }else if(glfwGetKey(Main.windowID, i) == 0 && st == RELEASED){
- state.replace(i, NONE);
- }
- }else if(i >= MOUSE_OFFSET && i < MOUSE_OFFSET + NBRE_BUTTON){
- if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 0 && st == NONE)continue;
- if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 1 && st == NONE){
- state.replace(i, PRESSED);
- }else if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 1 && st == PRESSED){
- state.replace(i, REPEATED);
- }else if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 0 && (st == PRESSED || st == REPEATED)){
- state.replace(i, RELEASED);
- }else if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 0 && st == RELEASED){
- state.replace(i, NONE);
- }
- }
- }
- int st = state.get(MOUSE_WHEEL_OFFSET);
- if(ywheel > 0 && (st == NONE || st == UP)){
- state.replace(MOUSE_WHEEL_OFFSET, UP);
- }else if(ywheel < 0 && (st == NONE || st == DOWN)){
- state.replace(MOUSE_WHEEL_OFFSET, DOWN);
- }else if(ywheel == 0 && (st == DOWN || st == UP)){
- state.replace(MOUSE_WHEEL_OFFSET, NONE);
- }
- ywheel = 0;
- if(dMouse.equals(previousDMouse)){
- dMouse = new Vector2f();
- }else{
- previousDMouse = dMouse;
- }
- }
-
- public static void destroy(){
- mousePos.release();
- scroll.release();
- }
-
- public static void scroll(long window, double xoffset, double yoffset) {
- ywheel = yoffset;
- }
-
- public static void mousepos(long window, double xpos, double ypos) {
- dMouse.x = (float) (xpos - mousePosition.x);
- dMouse.y = (float) (ypos - mousePosition.y);
- mousePosition.x = (float) xpos;
- mousePosition.y = (float) ypos;
- }
-
- public static boolean isButtonDown(int button){
- return state.get(button + MOUSE_OFFSET) == PRESSED;
- }
-
- public static boolean isButtonUp(int button){
- return state.get(button + MOUSE_OFFSET) == RELEASED;
- }
-
- public static boolean isButton(int button){
- return state.get(button + MOUSE_OFFSET) == PRESSED || state.get(button + MOUSE_OFFSET) == REPEATED;
- }
-
- public static int isButtonState(int button){
- return state.get(button + MOUSE_OFFSET);
- }
-
- public static boolean isKeyDown(int key){
- return state.get(key) == PRESSED;
- }
-
- public static boolean isKeyUp(int key){
- return state.get(key) == RELEASED;
- }
-
- public static boolean isKey(int key){
- return state.get(key) == PRESSED || state.get(key) == REPEATED;
- }
-
- public static int isKeyState(int key){
- return state.get(key);
- }
-
- public static int isMouseWheelState(){
- return state.get(MOUSE_WHEEL_OFFSET);
- }
-
- public static boolean isMouseWheelUp(){
- return state.get(MOUSE_WHEEL_OFFSET) == UP;
- }
-
- public static boolean isMouseWheelDown(){
- return state.get(MOUSE_WHEEL_OFFSET) == DOWN;
- }
-
- public static GLFWScrollCallback getScroll() {
- return scroll;
- }
-
- public static void setScroll(GLFWScrollCallback scroll) {
- Input.scroll = scroll;
- }
-
- public static GLFWCursorPosCallback getMousePos() {
- return mousePos;
- }
-
- public static void setMousePos(GLFWCursorPosCallback mousePos) {
- Input.mousePos = mousePos;
- }
-
- public static Vector2f getMousePosition() {
- return mousePosition;
- }
-
- public static void setMousePosition(Vector2f mousePosition) {
- Input.mousePosition = mousePosition;
- }
-
- public static Vector2f getDMouse() {
- return dMouse;
- }
-
- public static void setDMouse(Vector2f dMouse) {
- Input.dMouse = dMouse;
- }
-
- public static HashMap getState() {
- return state;
- }
-
- public static void setState(HashMap state) {
- Input.state = state;
- }
-
- public static double getYwheel() {
- return ywheel;
- }
-
- public static void setYwheel(double ywheel) {
- Input.ywheel = ywheel;
- }
-
- public static int getNone() {
- return NONE;
- }
-
- public static int getPressed() {
- return PRESSED;
- }
-
- public static int getReleased() {
- return RELEASED;
- }
-
- public static int getRepeated() {
- return REPEATED;
- }
-
- public static int getUp() {
- return UP;
- }
-
- public static int getDown() {
- return DOWN;
- }
-
- public static int getNbreKey() {
- return NBRE_KEY;
- }
-
- public static int getNbreButton() {
- return NBRE_BUTTON;
- }
-
- public static int getMouseOffset() {
- return MOUSE_OFFSET;
- }
-
- public static int getMouseWheelOffset() {
- return MOUSE_WHEEL_OFFSET;
- }
-
-
-
-}
+package fr.technicalgames.input;
+
+
+import static org.lwjgl.glfw.GLFW.*;
+
+import java.util.*;
+import java.util.Map.*;
+
+import org.lwjgl.glfw.*;
+
+import fr.technicalgames.*;
+import fr.technicalgames.math.*;
+
+public class Input{
+
+ public static GLFWScrollCallback scroll;
+ public static GLFWCursorPosCallback mousePos;
+
+ private static Vector2f mousePosition = new Vector2f();
+ private static Vector2f dMouse = new Vector2f();
+ private static Vector2f previousDMouse = new Vector2f();
+
+ public static final int NONE = 0,PRESSED = 1,RELEASED = 2,REPEATED = 3,UP = 4,DOWN = 5,
+ NBRE_KEY = 0x15D,NBRE_BUTTON = 10,
+ MOUSE_OFFSET = NBRE_KEY + 1,MOUSE_WHEEL_OFFSET = MOUSE_OFFSET + 1;
+
+ private static HashMap state = new HashMap();
+
+ private static double ywheel = 0;
+
+ public static void init(){
+ glfwSetScrollCallback(Main.windowID, scroll = new GLFWScrollCallback() {
+ public void invoke(long window, double xoffset, double yoffset) {
+ scroll(window, xoffset, yoffset);
+ }
+ });
+ glfwSetCursorPosCallback(Main.windowID, mousePos = new GLFWCursorPosCallback() {
+ public void invoke(long window, double xpos, double ypos) {
+ mousepos(window, xpos, ypos);
+ }
+ });
+ for(int i = 0;i < NBRE_KEY;i++){
+ state.put(i, NONE);
+ }
+ for(int i = 0;i < NBRE_BUTTON;i++){
+ state.put(i + MOUSE_OFFSET, NONE);
+ }
+ state.put(MOUSE_WHEEL_OFFSET, NONE);
+ }
+
+ public static void update(){
+ for(Entry set : state.entrySet()){
+ int i = set.getKey();
+ int st = set.getValue();
+ if(i > -1 && i < NBRE_KEY){
+ if(glfwGetKey(Main.windowID, i) == 0 && st == NONE)continue;
+ if(glfwGetKey(Main.windowID, i) == 1 && st == NONE){
+ state.replace(i, PRESSED);
+ }else if(glfwGetKey(Main.windowID, i) == 1 && st == PRESSED){
+ state.replace(i, REPEATED);
+ }else if(glfwGetKey(Main.windowID, i) == 0 && (st == PRESSED || st == REPEATED)){
+ state.replace(i, RELEASED);
+ }else if(glfwGetKey(Main.windowID, i) == 0 && st == RELEASED){
+ state.replace(i, NONE);
+ }
+ }else if(i >= MOUSE_OFFSET && i < MOUSE_OFFSET + NBRE_BUTTON){
+ if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 0 && st == NONE)continue;
+ if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 1 && st == NONE){
+ state.replace(i, PRESSED);
+ }else if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 1 && st == PRESSED){
+ state.replace(i, REPEATED);
+ }else if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 0 && (st == PRESSED || st == REPEATED)){
+ state.replace(i, RELEASED);
+ }else if(glfwGetMouseButton(Main.windowID, i - MOUSE_OFFSET) == 0 && st == RELEASED){
+ state.replace(i, NONE);
+ }
+ }
+ }
+ int st = state.get(MOUSE_WHEEL_OFFSET);
+ if(ywheel > 0 && (st == NONE || st == UP)){
+ state.replace(MOUSE_WHEEL_OFFSET, UP);
+ }else if(ywheel < 0 && (st == NONE || st == DOWN)){
+ state.replace(MOUSE_WHEEL_OFFSET, DOWN);
+ }else if(ywheel == 0 && (st == DOWN || st == UP)){
+ state.replace(MOUSE_WHEEL_OFFSET, NONE);
+ }
+ ywheel = 0;
+ if(dMouse.equals(previousDMouse)){
+ dMouse = new Vector2f();
+ }else{
+ previousDMouse = dMouse;
+ }
+ }
+
+ public static void destroy(){
+ mousePos.release();
+ scroll.release();
+ }
+
+ public static void scroll(long window, double xoffset, double yoffset) {
+ ywheel = yoffset;
+ }
+
+ public static void mousepos(long window, double xpos, double ypos) {
+ dMouse.x = (float) (xpos - mousePosition.x);
+ dMouse.y = (float) (ypos - mousePosition.y);
+ mousePosition.x = (float) xpos;
+ mousePosition.y = (float) ypos;
+ }
+
+ public static boolean isButtonDown(int button){
+ return state.get(button + MOUSE_OFFSET) == PRESSED;
+ }
+
+ public static boolean isButtonUp(int button){
+ return state.get(button + MOUSE_OFFSET) == RELEASED;
+ }
+
+ public static boolean isButton(int button){
+ return state.get(button + MOUSE_OFFSET) == PRESSED || state.get(button + MOUSE_OFFSET) == REPEATED;
+ }
+
+ public static int isButtonState(int button){
+ return state.get(button + MOUSE_OFFSET);
+ }
+
+ public static boolean isKeyDown(int key){
+ return state.get(key) == PRESSED;
+ }
+
+ public static boolean isKeyUp(int key){
+ return state.get(key) == RELEASED;
+ }
+
+ public static boolean isKey(int key){
+ return state.get(key) == PRESSED || state.get(key) == REPEATED;
+ }
+
+ public static int isKeyState(int key){
+ return state.get(key);
+ }
+
+ public static int isMouseWheelState(){
+ return state.get(MOUSE_WHEEL_OFFSET);
+ }
+
+ public static boolean isMouseWheelUp(){
+ return state.get(MOUSE_WHEEL_OFFSET) == UP;
+ }
+
+ public static boolean isMouseWheelDown(){
+ return state.get(MOUSE_WHEEL_OFFSET) == DOWN;
+ }
+
+ public static GLFWScrollCallback getScroll() {
+ return scroll;
+ }
+
+ public static void setScroll(GLFWScrollCallback scroll) {
+ Input.scroll = scroll;
+ }
+
+ public static GLFWCursorPosCallback getMousePos() {
+ return mousePos;
+ }
+
+ public static void setMousePos(GLFWCursorPosCallback mousePos) {
+ Input.mousePos = mousePos;
+ }
+
+ public static Vector2f getMousePosition() {
+ return mousePosition;
+ }
+
+ public static void setMousePosition(Vector2f mousePosition) {
+ Input.mousePosition = mousePosition;
+ }
+
+ public static Vector2f getDMouse() {
+ return dMouse;
+ }
+
+ public static void setDMouse(Vector2f dMouse) {
+ Input.dMouse = dMouse;
+ }
+
+ public static HashMap getState() {
+ return state;
+ }
+
+ public static void setState(HashMap state) {
+ Input.state = state;
+ }
+
+ public static double getYwheel() {
+ return ywheel;
+ }
+
+ public static void setYwheel(double ywheel) {
+ Input.ywheel = ywheel;
+ }
+
+ public static int getNone() {
+ return NONE;
+ }
+
+ public static int getPressed() {
+ return PRESSED;
+ }
+
+ public static int getReleased() {
+ return RELEASED;
+ }
+
+ public static int getRepeated() {
+ return REPEATED;
+ }
+
+ public static int getUp() {
+ return UP;
+ }
+
+ public static int getDown() {
+ return DOWN;
+ }
+
+ public static int getNbreKey() {
+ return NBRE_KEY;
+ }
+
+ public static int getNbreButton() {
+ return NBRE_BUTTON;
+ }
+
+ public static int getMouseOffset() {
+ return MOUSE_OFFSET;
+ }
+
+ public static int getMouseWheelOffset() {
+ return MOUSE_WHEEL_OFFSET;
+ }
+
+
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/light/DirectionalLight.java b/src/fr/technicalgames/light/DirectionalLight.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/light/DirectionalLight.java
rename to src/fr/technicalgames/light/DirectionalLight.java
index 2693dd3..4b18b6f 100644
--- a/Diffuse light/src/fr/technicalgames/light/DirectionalLight.java
+++ b/src/fr/technicalgames/light/DirectionalLight.java
@@ -1,18 +1,18 @@
-package fr.technicalgames.light;
-
-import fr.technicalgames.math.*;
-
-public class DirectionalLight extends Light{
-
- public DirectionalLight(Vector3f position, Vector3f intensities,float ambientCoefficient) {
- super(new Vector4f(position,0), intensities, 1.0f, ambientCoefficient, 0.0f, new Vector3f());
- }
-
- @Override
- public void update() {
-
- }
-
-
-
-}
+package fr.technicalgames.light;
+
+import fr.technicalgames.math.*;
+
+public class DirectionalLight extends Light{
+
+ public DirectionalLight(Vector3f position, Vector3f intensities,float ambientCoefficient) {
+ super(new Vector4f(position,0), intensities, 1.0f, ambientCoefficient, 0.0f, new Vector3f());
+ }
+
+ @Override
+ public void update() {
+
+ }
+
+
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/light/Light.java b/src/fr/technicalgames/light/Light.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/light/Light.java
rename to src/fr/technicalgames/light/Light.java
index a93f532..e9d2c92 100644
--- a/Diffuse light/src/fr/technicalgames/light/Light.java
+++ b/src/fr/technicalgames/light/Light.java
@@ -1,76 +1,76 @@
-package fr.technicalgames.light;
-import fr.technicalgames.math.*;
-import fr.technicalgames.shadow.*;
-
-public abstract class Light extends Shadow{
-
- public Vector4f position;//w == 0 si c une directional light
- public Vector3f intensities;
- public float attenuation;
- public float ambientCoefficient;
- public float coneAngle;
- public Vector3f coneDirection;
-
- public Light(Vector4f position,Vector3f intensities,float attenuation,float ambientCoefficient,float coneAngle,Vector3f coneDirection){
- super();
- this.position = position;
- this.intensities = intensities;
- this.attenuation = attenuation;
- this.ambientCoefficient = ambientCoefficient;
- this.coneAngle = coneAngle;
- this.coneDirection = coneDirection;
- }
-
- public abstract void update();
-
- public Vector4f getPosition() {
- return position;
- }
-
- public void setPosition(Vector4f position) {
- this.position = position;
- }
-
- public Vector3f getIntensities() {
- return intensities;
- }
-
- public void setIntensities(Vector3f intensities) {
- this.intensities = intensities;
- }
-
- public float getAttenuation() {
- return attenuation;
- }
-
- public void setAttenuation(float attenuation) {
- this.attenuation = attenuation;
- }
-
- public float getAmbientCoefficient() {
- return ambientCoefficient;
- }
-
- public void setAmbientCoefficient(float ambientCoefficient) {
- this.ambientCoefficient = ambientCoefficient;
- }
-
- public float getConeAngle() {
- return coneAngle;
- }
-
- public void setConeAngle(float coneAngle) {
- this.coneAngle = coneAngle;
- }
-
- public Vector3f getConeDirection() {
- return coneDirection;
- }
-
- public void setConeDirection(Vector3f coneDirection) {
- this.coneDirection = coneDirection;
- }
-
-
-
-}
+package fr.technicalgames.light;
+import fr.technicalgames.math.*;
+import fr.technicalgames.shadow.*;
+
+public abstract class Light extends Shadow{
+
+ public Vector4f position;//w == 0 si c une directional light
+ public Vector3f intensities;
+ public float attenuation;
+ public float ambientCoefficient;
+ public float coneAngle;
+ public Vector3f coneDirection;
+
+ public Light(Vector4f position,Vector3f intensities,float attenuation,float ambientCoefficient,float coneAngle,Vector3f coneDirection){
+ super();
+ this.position = position;
+ this.intensities = intensities;
+ this.attenuation = attenuation;
+ this.ambientCoefficient = ambientCoefficient;
+ this.coneAngle = coneAngle;
+ this.coneDirection = coneDirection;
+ }
+
+ public abstract void update();
+
+ public Vector4f getPosition() {
+ return position;
+ }
+
+ public void setPosition(Vector4f position) {
+ this.position = position;
+ }
+
+ public Vector3f getIntensities() {
+ return intensities;
+ }
+
+ public void setIntensities(Vector3f intensities) {
+ this.intensities = intensities;
+ }
+
+ public float getAttenuation() {
+ return attenuation;
+ }
+
+ public void setAttenuation(float attenuation) {
+ this.attenuation = attenuation;
+ }
+
+ public float getAmbientCoefficient() {
+ return ambientCoefficient;
+ }
+
+ public void setAmbientCoefficient(float ambientCoefficient) {
+ this.ambientCoefficient = ambientCoefficient;
+ }
+
+ public float getConeAngle() {
+ return coneAngle;
+ }
+
+ public void setConeAngle(float coneAngle) {
+ this.coneAngle = coneAngle;
+ }
+
+ public Vector3f getConeDirection() {
+ return coneDirection;
+ }
+
+ public void setConeDirection(Vector3f coneDirection) {
+ this.coneDirection = coneDirection;
+ }
+
+
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/light/SpotLight.java b/src/fr/technicalgames/light/SpotLight.java
similarity index 96%
rename from Diffuse light/src/fr/technicalgames/light/SpotLight.java
rename to src/fr/technicalgames/light/SpotLight.java
index 5dba452..4171b89 100644
--- a/Diffuse light/src/fr/technicalgames/light/SpotLight.java
+++ b/src/fr/technicalgames/light/SpotLight.java
@@ -1,17 +1,17 @@
-package fr.technicalgames.light;
-
-import fr.technicalgames.math.*;
-
-public class SpotLight extends Light{
-
- public SpotLight(Vector3f position, Vector3f intensities, float attenuation, float ambientCoefficient,
- float coneAngle, Vector3f coneDirection) {
- super(new Vector4f(position,1), intensities, attenuation, ambientCoefficient, coneAngle, coneDirection);
- }
-
- @Override
- public void update() {
-
- }
-
-}
+package fr.technicalgames.light;
+
+import fr.technicalgames.math.*;
+
+public class SpotLight extends Light{
+
+ public SpotLight(Vector3f position, Vector3f intensities, float attenuation, float ambientCoefficient,
+ float coneAngle, Vector3f coneDirection) {
+ super(new Vector4f(position,1), intensities, attenuation, ambientCoefficient, coneAngle, coneDirection);
+ }
+
+ @Override
+ public void update() {
+
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/material/DefaultMaterial.java b/src/fr/technicalgames/material/DefaultMaterial.java
similarity index 94%
rename from Diffuse light/src/fr/technicalgames/material/DefaultMaterial.java
rename to src/fr/technicalgames/material/DefaultMaterial.java
index 9e6423f..565c178 100644
--- a/Diffuse light/src/fr/technicalgames/material/DefaultMaterial.java
+++ b/src/fr/technicalgames/material/DefaultMaterial.java
@@ -1,11 +1,11 @@
-package fr.technicalgames.material;
-
-import fr.technicalgames.math.*;
-
-public class DefaultMaterial extends Material{
-
- public DefaultMaterial() {
- super(80.0f, new Vector3f(1,1,1));
- }
-
-}
+package fr.technicalgames.material;
+
+import fr.technicalgames.math.*;
+
+public class DefaultMaterial extends Material{
+
+ public DefaultMaterial() {
+ super(80.0f, new Vector3f(1,1,1));
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/material/Material.java b/src/fr/technicalgames/material/Material.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/material/Material.java
rename to src/fr/technicalgames/material/Material.java
index 060a32d..50093e8 100644
--- a/Diffuse light/src/fr/technicalgames/material/Material.java
+++ b/src/fr/technicalgames/material/Material.java
@@ -1,31 +1,31 @@
-package fr.technicalgames.material;
-
-import fr.technicalgames.math.*;
-
-public abstract class Material {
-
- public float shininess;
- public Vector3f specularColor;
-
- public Material(float shininess,Vector3f specularColor){
- this.shininess = shininess;
- this.specularColor = specularColor;
- }
-
- public float getShininess() {
- return shininess;
- }
-
- public void setShininess(float shininess) {
- this.shininess = shininess;
- }
-
- public Vector3f getSpecularColor() {
- return specularColor;
- }
-
- public void setSpecularColor(Vector3f specularColor) {
- this.specularColor = specularColor;
- }
-
-}
+package fr.technicalgames.material;
+
+import fr.technicalgames.math.*;
+
+public abstract class Material {
+
+ public float shininess;
+ public Vector3f specularColor;
+
+ public Material(float shininess,Vector3f specularColor){
+ this.shininess = shininess;
+ this.specularColor = specularColor;
+ }
+
+ public float getShininess() {
+ return shininess;
+ }
+
+ public void setShininess(float shininess) {
+ this.shininess = shininess;
+ }
+
+ public Vector3f getSpecularColor() {
+ return specularColor;
+ }
+
+ public void setSpecularColor(Vector3f specularColor) {
+ this.specularColor = specularColor;
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/math/Color4f.java b/src/fr/technicalgames/math/Color4f.java
similarity index 93%
rename from Diffuse light/src/fr/technicalgames/math/Color4f.java
rename to src/fr/technicalgames/math/Color4f.java
index aefea0d..4d2c781 100644
--- a/Diffuse light/src/fr/technicalgames/math/Color4f.java
+++ b/src/fr/technicalgames/math/Color4f.java
@@ -1,110 +1,110 @@
-package fr.technicalgames.math;
-
-
-import static org.lwjgl.opengl.GL11.*;
-
-public class Color4f {
-
- public static final Color4f
- RED = new Color4f(1,0,0,1),
- BLUE = new Color4f(0,0,1,1),
- GREEN = new Color4f(0,1,0,1),
- YELLOW = new Color4f(1,1,0,1),
- PURPLE = new Color4f(1,0,1,1),
- CYAN = new Color4f(0,1,1,1),
- BLACK = new Color4f(0,0,0,1),
- WHITE = new Color4f(1,1,1,1);
-
- public float r,g,b,a;
-
- public Color4f(float r,float g,float b,float a){
- this.r = r;
- this.g = g;
- this.b = b;
- this.a = a;
- }
-
- public static Color4f mul (Color4f a, float b){
- return new Color4f(a.r * b,a.g * b,a.b * b,a.a * b);
- }
-
- public static Color4f mul (float o,Color4f... a){
- float r = 0;
- float b = 0;
- float g = 0;
- float al = 0;
- for(Color4f c : a){
- r += c.r;
- g += c.g;
- b += c.b;
- al += c.a;
- }
- r /= a.length;
- g /= a.length;
- b /= a.length;
- al /= a.length;
- return new Color4f(r * o,g * o,b * o,al * o);
- }
-
- public static Color4f mul (Color4f... a){
- float r = 0;
- float b = 0;
- float g = 0;
- float al = 0;
- for(Color4f c : a){
- r += c.r;
- g += c.g;
- b += c.b;
- al += c.a;
- }
- r /= a.length;
- g /= a.length;
- b /= a.length;
- al /= a.length;
- return new Color4f(r,g,b,al);
- }
-
- public Color4f() {
- }
-
- public float getR() {
- return r;
- }
-
- public void setR(float r) {
- this.r = r;
- }
-
- public float getG() {
- return g;
- }
-
- public void setG(float g) {
- this.g = g;
- }
-
- public float getB() {
- return b;
- }
-
- public void setB(float b) {
- this.b = b;
- }
-
- public float getA() {
- return a;
- }
-
- public void setA(float a) {
- this.a = a;
- }
-
- public void bind(){
- glColor4f(r,g,b,a);
- }
-
- public void unbind(){
- BLACK.bind();
- }
-
-}
+package fr.technicalgames.math;
+
+
+import static org.lwjgl.opengl.GL11.*;
+
+public class Color4f {
+
+ public static final Color4f
+ RED = new Color4f(1,0,0,1),
+ BLUE = new Color4f(0,0,1,1),
+ GREEN = new Color4f(0,1,0,1),
+ YELLOW = new Color4f(1,1,0,1),
+ PURPLE = new Color4f(1,0,1,1),
+ CYAN = new Color4f(0,1,1,1),
+ BLACK = new Color4f(0,0,0,1),
+ WHITE = new Color4f(1,1,1,1);
+
+ public float r,g,b,a;
+
+ public Color4f(float r,float g,float b,float a){
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ this.a = a;
+ }
+
+ public static Color4f mul (Color4f a, float b){
+ return new Color4f(a.r * b,a.g * b,a.b * b,a.a * b);
+ }
+
+ public static Color4f mul (float o,Color4f... a){
+ float r = 0;
+ float b = 0;
+ float g = 0;
+ float al = 0;
+ for(Color4f c : a){
+ r += c.r;
+ g += c.g;
+ b += c.b;
+ al += c.a;
+ }
+ r /= a.length;
+ g /= a.length;
+ b /= a.length;
+ al /= a.length;
+ return new Color4f(r * o,g * o,b * o,al * o);
+ }
+
+ public static Color4f mul (Color4f... a){
+ float r = 0;
+ float b = 0;
+ float g = 0;
+ float al = 0;
+ for(Color4f c : a){
+ r += c.r;
+ g += c.g;
+ b += c.b;
+ al += c.a;
+ }
+ r /= a.length;
+ g /= a.length;
+ b /= a.length;
+ al /= a.length;
+ return new Color4f(r,g,b,al);
+ }
+
+ public Color4f() {
+ }
+
+ public float getR() {
+ return r;
+ }
+
+ public void setR(float r) {
+ this.r = r;
+ }
+
+ public float getG() {
+ return g;
+ }
+
+ public void setG(float g) {
+ this.g = g;
+ }
+
+ public float getB() {
+ return b;
+ }
+
+ public void setB(float b) {
+ this.b = b;
+ }
+
+ public float getA() {
+ return a;
+ }
+
+ public void setA(float a) {
+ this.a = a;
+ }
+
+ public void bind(){
+ glColor4f(r,g,b,a);
+ }
+
+ public void unbind(){
+ BLACK.bind();
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/math/Mathf.java b/src/fr/technicalgames/math/Mathf.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/math/Mathf.java
rename to src/fr/technicalgames/math/Mathf.java
index 608de0a..8d4ccc8 100644
--- a/Diffuse light/src/fr/technicalgames/math/Mathf.java
+++ b/src/fr/technicalgames/math/Mathf.java
@@ -1,67 +1,67 @@
-package fr.technicalgames.math;
-
-
-public class Mathf {
-
- public static final float PI = 3.14159265358979323846f;
- public static final float EPSILON = 1.401298e-45f;
-
- public static float cos(float angle){
- return (float)Math.cos(angle);
- }
-
- public static float acos(float angle){
- return (float)Math.acos(angle);
- }
-
- public static float sin(float angle){
- return (float)Math.sin(angle);
- }
-
- public static float asin(float angle){
- return (float)Math.asin(angle);
- }
-
- public static float toRadians(float angle){
- return (float)Math.toRadians(angle);
- }
-
- public static float toDegrees(float angle){
- return (float)Math.toDegrees(angle);
- }
-
- public static float atan2(float a,float b){
- return (float)Math.atan2(a,b);
- }
-
- public static float cut(float nbre,float a){
- return (float)((int)(nbre*Math.pow(10, a))/Math.pow(10, a));
- }
-
- public static boolean equals(float a,float b,float tolerance){
- return (a + tolerance >= b) && (a - tolerance <= b);
- }
-
- public static float sqrt(float a){
- return (float)Math.sqrt(a);
- }
-
- public static float exp(float a){
- return (float)Math.sqrt(a);
- }
-
- public static float log(float a){
- return (float)Math.log(a);
- }
-
- public static float clamp(float value, float min, float max) {
- if(value < min){
- value = min;
- }
- if(value > max){
- value = max;
- }
- return value;
- }
-
-}
+package fr.technicalgames.math;
+
+
+public class Mathf {
+
+ public static final float PI = 3.14159265358979323846f;
+ public static final float EPSILON = 1.401298e-45f;
+
+ public static float cos(float angle){
+ return (float)Math.cos(angle);
+ }
+
+ public static float acos(float angle){
+ return (float)Math.acos(angle);
+ }
+
+ public static float sin(float angle){
+ return (float)Math.sin(angle);
+ }
+
+ public static float asin(float angle){
+ return (float)Math.asin(angle);
+ }
+
+ public static float toRadians(float angle){
+ return (float)Math.toRadians(angle);
+ }
+
+ public static float toDegrees(float angle){
+ return (float)Math.toDegrees(angle);
+ }
+
+ public static float atan2(float a,float b){
+ return (float)Math.atan2(a,b);
+ }
+
+ public static float cut(float nbre,float a){
+ return (float)((int)(nbre*Math.pow(10, a))/Math.pow(10, a));
+ }
+
+ public static boolean equals(float a,float b,float tolerance){
+ return (a + tolerance >= b) && (a - tolerance <= b);
+ }
+
+ public static float sqrt(float a){
+ return (float)Math.sqrt(a);
+ }
+
+ public static float exp(float a){
+ return (float)Math.sqrt(a);
+ }
+
+ public static float log(float a){
+ return (float)Math.log(a);
+ }
+
+ public static float clamp(float value, float min, float max) {
+ if(value < min){
+ value = min;
+ }
+ if(value > max){
+ value = max;
+ }
+ return value;
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/math/Matrix4f.java b/src/fr/technicalgames/math/Matrix4f.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/math/Matrix4f.java
rename to src/fr/technicalgames/math/Matrix4f.java
index 1ca1e24..0e24eaa 100644
--- a/Diffuse light/src/fr/technicalgames/math/Matrix4f.java
+++ b/src/fr/technicalgames/math/Matrix4f.java
@@ -1,189 +1,189 @@
-package fr.technicalgames.math;
-
-
-import java.nio.*;
-import java.util.*;
-
-import org.lwjgl.*;
-
-public class Matrix4f {
-
- public float[][] m = null;
-
- public Matrix4f(){
- m = new float[][]{
- {1,0,0,0},
- {0,1,0,0},
- {0,0,1,0},
- {0,0,0,1}
- };
- }
-
- public Matrix4f(float[][] m){
- this.m = m;
- }
-
- public Matrix4f loadIdentity(){
- m = new float[][]{
- {1,0,0,0},
- {0,1,0,0},
- {0,0,1,0},
- {0,0,0,1}
- };
- return this;
- }
-
- public Matrix4f rotate(Quaternion q){
- Matrix4f rot = q.toMatrixRotation();
- m = mul(rot).getM();
- return this;
- }
-
-
- public void rotate(float x,float y,float z){
- x = Mathf.toRadians(x);
- y = Mathf.toRadians(y);
- z = Mathf.toRadians(z);
- Matrix4f rx = new Matrix4f(new float[][]{
- {1,0,0,0},
- {0,Mathf.cos(x),-Mathf.sin(x),0},
- {0,Mathf.sin(x),Mathf.cos(x),0},
- {0,0,0,1}
- });
-
- Matrix4f ry = new Matrix4f(new float[][]{
- {Mathf.cos(y),0,Mathf.sin(y),0},
- {0,1,0,0},
- {-Mathf.sin(y),0,Mathf.cos(y),0},
- {0,0,0,1}
- });
-
- Matrix4f rz = new Matrix4f(new float[][]{
- {Mathf.cos(z),-Mathf.sin(z),0,0},
- {Mathf.sin(z),Mathf.cos(z),0,0},
- {0,0,1,0},
- {0,0,0,1}
- });
- Matrix4f m1 = (rz.mul(ry.mul(rx)));
- m = mul(m1).getM();
- }
-
- public static Matrix4f rotate(Vector3f forward, Vector3f up, Vector3f right)
- {
- Matrix4f mat = new Matrix4f(new float[][]{
- {right.getX(), right.getY(), right.getZ() ,0},
- {up.getX(), up.getY(), up.getZ() ,0},
- {forward.getX(),forward.getY(), forward.getZ() ,0},
- {0,0,0,1}
- });
- return mat;
- }
-
- public Matrix4f tranlate(float x,float y,float z){
- Matrix4f mat = new Matrix4f(new float[][]{
- {1,0,0,x},
- {0,1,0,y},
- {0,0,1,z},
- {0,0,0,1}
- });
- m = mul(mat).getM();
- return this;
- }
-
- public Matrix4f scale(float x,float y,float z){
- Matrix4f mat = new Matrix4f(new float[][]{
- {x,0,0,0},
- {0,y,0,0},
- {0,0,z,0},
- {0,0,0,1}
- });
- m = mul(mat).getM();
- return this;
- }
-
- public Matrix4f mul(Matrix4f mat){
- Matrix4f ma = new Matrix4f();
- for(int i = 0;i < 4;i++){
- for(int j = 0;j < 4;j++){
- ma.m[i][j] = m[i][0] * mat.m[0][j] +
- m[i][1] * mat.m[1][j] +
- m[i][2] * mat.m[2][j] +
- m[i][3] * mat.m[3][j];
- }
- }
- return ma;
- }
-
- public Matrix4f Ortho2D(float left, float right, float bottom, float top, float near, float far)
- {
- float width = right - left;
- float height = top - bottom;
- float depth = far - near;
-
- m = new float[][]{
- {2/width,0,0,-(right + left)/width},
- {0,2/height,0,-(top + bottom)/height},
- {0,0,-2/depth,-(far + near)/depth},
- {0,0,0,1}
- };
-
- return this;
- }
-
- public Matrix4f perspective(float fov, float aspectRatio, float zNear, float zFar)
- {
- float f = fov;
- fov = Mathf.toRadians(f);
- float tanHalfFOV = (float)Math.tan(fov / 2);
- float zRange = zNear - zFar;
-
- m = new float[][]{
- {1.0f / (tanHalfFOV * aspectRatio),0,0,0},
- {0,1.0f / tanHalfFOV,0,0},
- {0,0,(-zNear -zFar)/zRange,2.0f * zFar * zNear / zRange},
- {0,0,1,0}
- };
-
- return this;
- }
-
- public FloatBuffer getBuffer(){
- FloatBuffer buffer = BufferUtils.createFloatBuffer(4 * 4);
- for(int i = 0;i < 4;i++){
- buffer.put(m[i]);
- }
- buffer.flip();
- return buffer;
- }
-
- public String toString(){
- int size = 3;
- int max = 10;
- StringJoiner st = new StringJoiner("\n","--------Mat4-Begin--------\n","\n--------Mat4-End----------");
- for(int i = 0;i < 4;i++){
- StringJoiner st2 = new StringJoiner(" | ");
- for(int j = 0;j < 4;j++){
- String value = Mathf.cut(m[i][j], size) + "";
- for(int k = value.length();k < max;k++){
- value += " ";
- }
- st2.add(value);
- }
- st.add(st2.toString());
- }
- return st.toString();
- }
-
- public float[][] getM() {
- return m;
- }
-
- public void setM(float[][] m) {
- this.m = m;
- }
-
- public Matrix4f copy(){
- return new Matrix4f(this.getM());
- }
-
-}
+package fr.technicalgames.math;
+
+
+import java.nio.*;
+import java.util.*;
+
+import org.lwjgl.*;
+
+public class Matrix4f {
+
+ public float[][] m = null;
+
+ public Matrix4f(){
+ m = new float[][]{
+ {1,0,0,0},
+ {0,1,0,0},
+ {0,0,1,0},
+ {0,0,0,1}
+ };
+ }
+
+ public Matrix4f(float[][] m){
+ this.m = m;
+ }
+
+ public Matrix4f loadIdentity(){
+ m = new float[][]{
+ {1,0,0,0},
+ {0,1,0,0},
+ {0,0,1,0},
+ {0,0,0,1}
+ };
+ return this;
+ }
+
+ public Matrix4f rotate(Quaternion q){
+ Matrix4f rot = q.toMatrixRotation();
+ m = mul(rot).getM();
+ return this;
+ }
+
+
+ public void rotate(float x,float y,float z){
+ x = Mathf.toRadians(x);
+ y = Mathf.toRadians(y);
+ z = Mathf.toRadians(z);
+ Matrix4f rx = new Matrix4f(new float[][]{
+ {1,0,0,0},
+ {0,Mathf.cos(x),-Mathf.sin(x),0},
+ {0,Mathf.sin(x),Mathf.cos(x),0},
+ {0,0,0,1}
+ });
+
+ Matrix4f ry = new Matrix4f(new float[][]{
+ {Mathf.cos(y),0,Mathf.sin(y),0},
+ {0,1,0,0},
+ {-Mathf.sin(y),0,Mathf.cos(y),0},
+ {0,0,0,1}
+ });
+
+ Matrix4f rz = new Matrix4f(new float[][]{
+ {Mathf.cos(z),-Mathf.sin(z),0,0},
+ {Mathf.sin(z),Mathf.cos(z),0,0},
+ {0,0,1,0},
+ {0,0,0,1}
+ });
+ Matrix4f m1 = (rz.mul(ry.mul(rx)));
+ m = mul(m1).getM();
+ }
+
+ public static Matrix4f rotate(Vector3f forward, Vector3f up, Vector3f right)
+ {
+ Matrix4f mat = new Matrix4f(new float[][]{
+ {right.getX(), right.getY(), right.getZ() ,0},
+ {up.getX(), up.getY(), up.getZ() ,0},
+ {forward.getX(),forward.getY(), forward.getZ() ,0},
+ {0,0,0,1}
+ });
+ return mat;
+ }
+
+ public Matrix4f tranlate(float x,float y,float z){
+ Matrix4f mat = new Matrix4f(new float[][]{
+ {1,0,0,x},
+ {0,1,0,y},
+ {0,0,1,z},
+ {0,0,0,1}
+ });
+ m = mul(mat).getM();
+ return this;
+ }
+
+ public Matrix4f scale(float x,float y,float z){
+ Matrix4f mat = new Matrix4f(new float[][]{
+ {x,0,0,0},
+ {0,y,0,0},
+ {0,0,z,0},
+ {0,0,0,1}
+ });
+ m = mul(mat).getM();
+ return this;
+ }
+
+ public Matrix4f mul(Matrix4f mat){
+ Matrix4f ma = new Matrix4f();
+ for(int i = 0;i < 4;i++){
+ for(int j = 0;j < 4;j++){
+ ma.m[i][j] = m[i][0] * mat.m[0][j] +
+ m[i][1] * mat.m[1][j] +
+ m[i][2] * mat.m[2][j] +
+ m[i][3] * mat.m[3][j];
+ }
+ }
+ return ma;
+ }
+
+ public Matrix4f Ortho2D(float left, float right, float bottom, float top, float near, float far)
+ {
+ float width = right - left;
+ float height = top - bottom;
+ float depth = far - near;
+
+ m = new float[][]{
+ {2/width,0,0,-(right + left)/width},
+ {0,2/height,0,-(top + bottom)/height},
+ {0,0,-2/depth,-(far + near)/depth},
+ {0,0,0,1}
+ };
+
+ return this;
+ }
+
+ public Matrix4f perspective(float fov, float aspectRatio, float zNear, float zFar)
+ {
+ float f = fov;
+ fov = Mathf.toRadians(f);
+ float tanHalfFOV = (float)Math.tan(fov / 2);
+ float zRange = zNear - zFar;
+
+ m = new float[][]{
+ {1.0f / (tanHalfFOV * aspectRatio),0,0,0},
+ {0,1.0f / tanHalfFOV,0,0},
+ {0,0,(-zNear -zFar)/zRange,2.0f * zFar * zNear / zRange},
+ {0,0,1,0}
+ };
+
+ return this;
+ }
+
+ public FloatBuffer getBuffer(){
+ FloatBuffer buffer = BufferUtils.createFloatBuffer(4 * 4);
+ for(int i = 0;i < 4;i++){
+ buffer.put(m[i]);
+ }
+ buffer.flip();
+ return buffer;
+ }
+
+ public String toString(){
+ int size = 3;
+ int max = 10;
+ StringJoiner st = new StringJoiner("\n","--------Mat4-Begin--------\n","\n--------Mat4-End----------");
+ for(int i = 0;i < 4;i++){
+ StringJoiner st2 = new StringJoiner(" | ");
+ for(int j = 0;j < 4;j++){
+ String value = Mathf.cut(m[i][j], size) + "";
+ for(int k = value.length();k < max;k++){
+ value += " ";
+ }
+ st2.add(value);
+ }
+ st.add(st2.toString());
+ }
+ return st.toString();
+ }
+
+ public float[][] getM() {
+ return m;
+ }
+
+ public void setM(float[][] m) {
+ this.m = m;
+ }
+
+ public Matrix4f copy(){
+ return new Matrix4f(this.getM());
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/math/Quaternion.java b/src/fr/technicalgames/math/Quaternion.java
similarity index 96%
rename from Diffuse light/src/fr/technicalgames/math/Quaternion.java
rename to src/fr/technicalgames/math/Quaternion.java
index 4304585..86c807c 100644
--- a/Diffuse light/src/fr/technicalgames/math/Quaternion.java
+++ b/src/fr/technicalgames/math/Quaternion.java
@@ -1,132 +1,132 @@
-package fr.technicalgames.math;
-
-
-public class Quaternion {
-
- public float x,y,z,w;
-
- public Quaternion(){
- x = 0;
- y = 0;
- z = 0;
- w = 0;
- }
-
- public Quaternion(Vector3f axis,float angle){
- float sin = Mathf.sin(Mathf.toRadians(angle/2.0f));
- float cos = Mathf.cos(Mathf.toRadians(angle/2.0f));
- x = axis.getX() * sin;
- y = axis.getY() * sin;
- z = axis.getZ() * sin;
- w = cos;
- }
-
- public Quaternion(Vector3f rot){
- this(rot.x,rot.y,rot.z);
- }
-
- public Quaternion (float yaw, float roll, float pitch) {
- yaw = Mathf.toRadians(yaw);
- roll = Mathf.toRadians(roll);
- pitch = Mathf.toRadians(pitch);
- float angle;
- float sinRoll, sinPitch, sinYaw, cosRoll, cosPitch, cosYaw;
- angle = pitch * 0.5f;
- sinPitch = Mathf.sin(angle);
- cosPitch = Mathf.cos(angle);
- angle = roll * 0.5f;
- sinRoll = Mathf.sin(angle);
- cosRoll = Mathf.cos(angle);
- angle = yaw * 0.5f;
- sinYaw = Mathf.sin(angle);
- cosYaw = Mathf.cos(angle);
-
- // variables used to reduce multiplication calls.
- float cosRollXcosPitch = cosRoll * cosPitch;
- float sinRollXsinPitch = sinRoll * sinPitch;
- float cosRollXsinPitch = cosRoll * sinPitch;
- float sinRollXcosPitch = sinRoll * cosPitch;
-
- w = (cosRollXcosPitch * cosYaw - sinRollXsinPitch * sinYaw);
- x = (cosRollXcosPitch * sinYaw + sinRollXsinPitch * cosYaw);
- y = (sinRollXcosPitch * cosYaw + cosRollXsinPitch * sinYaw);
- z = (cosRollXsinPitch * cosYaw - sinRollXcosPitch * sinYaw);
-
- normalize();
- }
-
- public void normalize(){
- float n = (float)(1.0/Math.sqrt(norm()));
- x *= n;
- y *= n;
- z *= n;
- w *= n;
- }
-
- public float norm(){
- return w * w + x * x + y * y + z * z;
- }
-
- public Quaternion Euler(Vector3f rot) {
- x = Mathf.toRadians(rot.x);
- y = Mathf.toRadians(rot.y);
- z = Mathf.toRadians(rot.z);
- float c1 = Mathf.cos(y/2);
- float s1 = Mathf.sin(y/2);
- float c2 = Mathf.cos(z/2);
- float s2 = Mathf.sin(z/2);
- float c3 = Mathf.cos(x/2);
- float s3 = Mathf.sin(x/2);
- float c1c2 = c1*c2;
- float s1s2 = s1*s2;
- this.w =c1c2*c3 - s1s2*s3;
- this.x =c1c2*s3 + s1s2*c3;
- this.y =s1*c2*c3 + c1*s2*s3;
- this.z =c1*s2*c3 - s1*c2*s3;
- return new Quaternion(x, y, z, w);
- }
-
- public Vector3f toEulerAngles(){
- Vector3f euler = new Vector3f();
-
- float sqw = w * w;
- float sqx = x * x;
- float sqy = y * y;
- float sqz = z * z;
- float unit = sqx + sqy + sqz + sqw; // if normalized is one, otherwise
- // is correction factor
- float test = x * y + z * w;
- if (test > 0.499 * unit) { // singularity at north pole
- euler.y = 2 * Mathf.atan2(x, w);
- euler.z = Mathf.PI/2.0f;
- euler.x = 0;
- } else if (test < -0.499 * unit) { // singularity at south pole
- euler.y = -2 * Mathf.atan2(x, w);
- euler.z = -Mathf.PI/2.0f;
- euler.x = 0;
- } else {
- euler.y = Mathf.atan2(2 * y * w - 2 * x * z, sqx - sqy - sqz + sqw); // roll or heading
- euler.z = Mathf.asin(2 * test / unit); // pitch or attitude
- euler.x = Mathf.atan2(2 * x * w - 2 * y * z, -sqx + sqy - sqz + sqw); // yaw or bank
- }
- return euler.toDegrees();
- }
-
- public Quaternion(float axisX,float axisY,float axisZ,float angle){
- float sin = Mathf.sin(Mathf.toRadians(angle/2.0f));
- float cos = Mathf.cos(Mathf.toRadians(angle/2.0f));
- x = axisX * sin;
- y = axisY * sin;
- z = axisZ * sin;
- w = cos;
- }
-
- public Matrix4f toMatrixRotation(){
- Vector3f forward = new Vector3f(2.0f * (x * z - w * y), 2.0f * (y * z + w * x), 1.0f - 2.0f * (x * x + y * y));
- Vector3f up = new Vector3f(2.0f * (x * y + w * z), 1.0f - 2.0f * (x * x + z * z), 2.0f * (y * z - w * x));
- Vector3f right = new Vector3f(1.0f - 2.0f * (y * y + z * z), 2.0f * (x * y - w * z), 2.0f * (x * z + w * y));
-
- return Matrix4f.rotate(forward, up, right);
- }
-
-}
+package fr.technicalgames.math;
+
+
+public class Quaternion {
+
+ public float x,y,z,w;
+
+ public Quaternion(){
+ x = 0;
+ y = 0;
+ z = 0;
+ w = 0;
+ }
+
+ public Quaternion(Vector3f axis,float angle){
+ float sin = Mathf.sin(Mathf.toRadians(angle/2.0f));
+ float cos = Mathf.cos(Mathf.toRadians(angle/2.0f));
+ x = axis.getX() * sin;
+ y = axis.getY() * sin;
+ z = axis.getZ() * sin;
+ w = cos;
+ }
+
+ public Quaternion(Vector3f rot){
+ this(rot.x,rot.y,rot.z);
+ }
+
+ public Quaternion (float yaw, float roll, float pitch) {
+ yaw = Mathf.toRadians(yaw);
+ roll = Mathf.toRadians(roll);
+ pitch = Mathf.toRadians(pitch);
+ float angle;
+ float sinRoll, sinPitch, sinYaw, cosRoll, cosPitch, cosYaw;
+ angle = pitch * 0.5f;
+ sinPitch = Mathf.sin(angle);
+ cosPitch = Mathf.cos(angle);
+ angle = roll * 0.5f;
+ sinRoll = Mathf.sin(angle);
+ cosRoll = Mathf.cos(angle);
+ angle = yaw * 0.5f;
+ sinYaw = Mathf.sin(angle);
+ cosYaw = Mathf.cos(angle);
+
+ // variables used to reduce multiplication calls.
+ float cosRollXcosPitch = cosRoll * cosPitch;
+ float sinRollXsinPitch = sinRoll * sinPitch;
+ float cosRollXsinPitch = cosRoll * sinPitch;
+ float sinRollXcosPitch = sinRoll * cosPitch;
+
+ w = (cosRollXcosPitch * cosYaw - sinRollXsinPitch * sinYaw);
+ x = (cosRollXcosPitch * sinYaw + sinRollXsinPitch * cosYaw);
+ y = (sinRollXcosPitch * cosYaw + cosRollXsinPitch * sinYaw);
+ z = (cosRollXsinPitch * cosYaw - sinRollXcosPitch * sinYaw);
+
+ normalize();
+ }
+
+ public void normalize(){
+ float n = (float)(1.0/Math.sqrt(norm()));
+ x *= n;
+ y *= n;
+ z *= n;
+ w *= n;
+ }
+
+ public float norm(){
+ return w * w + x * x + y * y + z * z;
+ }
+
+ public Quaternion Euler(Vector3f rot) {
+ x = Mathf.toRadians(rot.x);
+ y = Mathf.toRadians(rot.y);
+ z = Mathf.toRadians(rot.z);
+ float c1 = Mathf.cos(y/2);
+ float s1 = Mathf.sin(y/2);
+ float c2 = Mathf.cos(z/2);
+ float s2 = Mathf.sin(z/2);
+ float c3 = Mathf.cos(x/2);
+ float s3 = Mathf.sin(x/2);
+ float c1c2 = c1*c2;
+ float s1s2 = s1*s2;
+ this.w =c1c2*c3 - s1s2*s3;
+ this.x =c1c2*s3 + s1s2*c3;
+ this.y =s1*c2*c3 + c1*s2*s3;
+ this.z =c1*s2*c3 - s1*c2*s3;
+ return new Quaternion(x, y, z, w);
+ }
+
+ public Vector3f toEulerAngles(){
+ Vector3f euler = new Vector3f();
+
+ float sqw = w * w;
+ float sqx = x * x;
+ float sqy = y * y;
+ float sqz = z * z;
+ float unit = sqx + sqy + sqz + sqw; // if normalized is one, otherwise
+ // is correction factor
+ float test = x * y + z * w;
+ if (test > 0.499 * unit) { // singularity at north pole
+ euler.y = 2 * Mathf.atan2(x, w);
+ euler.z = Mathf.PI/2.0f;
+ euler.x = 0;
+ } else if (test < -0.499 * unit) { // singularity at south pole
+ euler.y = -2 * Mathf.atan2(x, w);
+ euler.z = -Mathf.PI/2.0f;
+ euler.x = 0;
+ } else {
+ euler.y = Mathf.atan2(2 * y * w - 2 * x * z, sqx - sqy - sqz + sqw); // roll or heading
+ euler.z = Mathf.asin(2 * test / unit); // pitch or attitude
+ euler.x = Mathf.atan2(2 * x * w - 2 * y * z, -sqx + sqy - sqz + sqw); // yaw or bank
+ }
+ return euler.toDegrees();
+ }
+
+ public Quaternion(float axisX,float axisY,float axisZ,float angle){
+ float sin = Mathf.sin(Mathf.toRadians(angle/2.0f));
+ float cos = Mathf.cos(Mathf.toRadians(angle/2.0f));
+ x = axisX * sin;
+ y = axisY * sin;
+ z = axisZ * sin;
+ w = cos;
+ }
+
+ public Matrix4f toMatrixRotation(){
+ Vector3f forward = new Vector3f(2.0f * (x * z - w * y), 2.0f * (y * z + w * x), 1.0f - 2.0f * (x * x + y * y));
+ Vector3f up = new Vector3f(2.0f * (x * y + w * z), 1.0f - 2.0f * (x * x + z * z), 2.0f * (y * z - w * x));
+ Vector3f right = new Vector3f(1.0f - 2.0f * (y * y + z * z), 2.0f * (x * y - w * z), 2.0f * (x * z + w * y));
+
+ return Matrix4f.rotate(forward, up, right);
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/math/Vector2f.java b/src/fr/technicalgames/math/Vector2f.java
similarity index 92%
rename from Diffuse light/src/fr/technicalgames/math/Vector2f.java
rename to src/fr/technicalgames/math/Vector2f.java
index 0543543..9c3c2e9 100644
--- a/Diffuse light/src/fr/technicalgames/math/Vector2f.java
+++ b/src/fr/technicalgames/math/Vector2f.java
@@ -1,42 +1,42 @@
-package fr.technicalgames.math;
-
-
-import java.util.*;
-
-public class Vector2f {
-
- public float x,y;
-
- public Vector2f(){
- x = 0;
- y = 0;
- }
-
- public Vector2f(float x,float y){
- this.x = x;
- this.y = y;
- }
-
- public float getX() {
- return x;
- }
-
- public void setX(float x) {
- this.x = x;
- }
-
- public float getY() {
- return y;
- }
-
- public void setY(float y) {
- this.y = y;
- }
-
- public String toString(){
- StringJoiner st = new StringJoiner(",","vec2(",")");
- st.add("" + x);
- st.add("" + y);
- return st.toString();
- }
-}
+package fr.technicalgames.math;
+
+
+import java.util.*;
+
+public class Vector2f {
+
+ public float x,y;
+
+ public Vector2f(){
+ x = 0;
+ y = 0;
+ }
+
+ public Vector2f(float x,float y){
+ this.x = x;
+ this.y = y;
+ }
+
+ public float getX() {
+ return x;
+ }
+
+ public void setX(float x) {
+ this.x = x;
+ }
+
+ public float getY() {
+ return y;
+ }
+
+ public void setY(float y) {
+ this.y = y;
+ }
+
+ public String toString(){
+ StringJoiner st = new StringJoiner(",","vec2(",")");
+ st.add("" + x);
+ st.add("" + y);
+ return st.toString();
+ }
+}
diff --git a/Diffuse light/src/fr/technicalgames/math/Vector3f.java b/src/fr/technicalgames/math/Vector3f.java
similarity index 93%
rename from Diffuse light/src/fr/technicalgames/math/Vector3f.java
rename to src/fr/technicalgames/math/Vector3f.java
index 5c78928..8f5f971 100644
--- a/Diffuse light/src/fr/technicalgames/math/Vector3f.java
+++ b/src/fr/technicalgames/math/Vector3f.java
@@ -1,104 +1,104 @@
-package fr.technicalgames.math;
-
-
-import java.util.*;
-
-public class Vector3f {
-
- public float x,y,z;
-
- public Vector3f(){
- x = 0;
- y = 0;
- z = 0;
- }
-
- public Vector3f(float x,float y,float z){
- this.x = x;
- this.y = y;
- this.z = z;
- }
-
- public Vector3f(Vector2f vec,float z){
- this(vec.x,vec.y,z);
- }
-
- public Vector3f(Vector3f vec){
- this(vec.x,vec.y,vec.z);
- }
-
- public float getX() {
- return x;
- }
-
- public void setX(float x) {
- this.x = x;
- }
-
- public float getY() {
- return y;
- }
-
- public void setY(float y) {
- this.y = y;
- }
-
- public float getZ() {
- return z;
- }
-
- public void setZ(float z) {
- this.z = z;
- }
-
- public float length(){
- return Mathf.sqrt(x * x + y * y + z * z);
- }
-
- public Vector3f lookAt(Vector3f d){
- Vector3f rot = new Vector3f();
- float x1 = d.x - x;
- float y1 = d.y - y;
- float z1 = d.z - z;
-
- return rot;
- }
-
- public Vector3f normalize(){
- float length = length();
- x /= length;
- y /= length;
- z /= length;
- return this;
- }
-
- public Vector3f mul(float m){
- x *= m;
- y *= m;
- z *= m;
- return this;
- }
-
- public String toString(){
- StringJoiner st = new StringJoiner(",","vec3(",")");
- st.add("" + x);
- st.add("" + y);
- st.add("" + z);
- return st.toString();
- }
-
- public Vector3f toRadians() {
- x = Mathf.toRadians(x);
- y = Mathf.toRadians(y);
- z = Mathf.toRadians(z);
- return this;
- }
-
- public Vector3f toDegrees() {
- x = Mathf.toDegrees(x);
- y = Mathf.toDegrees(y);
- z = Mathf.toDegrees(z);
- return this;
- }
-
-}
+package fr.technicalgames.math;
+
+
+import java.util.*;
+
+public class Vector3f {
+
+ public float x,y,z;
+
+ public Vector3f(){
+ x = 0;
+ y = 0;
+ z = 0;
+ }
+
+ public Vector3f(float x,float y,float z){
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ public Vector3f(Vector2f vec,float z){
+ this(vec.x,vec.y,z);
+ }
+
+ public Vector3f(Vector3f vec){
+ this(vec.x,vec.y,vec.z);
+ }
+
+ public float getX() {
+ return x;
+ }
+
+ public void setX(float x) {
+ this.x = x;
+ }
+
+ public float getY() {
+ return y;
+ }
+
+ public void setY(float y) {
+ this.y = y;
+ }
+
+ public float getZ() {
+ return z;
+ }
+
+ public void setZ(float z) {
+ this.z = z;
+ }
+
+ public float length(){
+ return Mathf.sqrt(x * x + y * y + z * z);
+ }
+
+ public Vector3f lookAt(Vector3f d){
+ Vector3f rot = new Vector3f();
+ float x1 = d.x - x;
+ float y1 = d.y - y;
+ float z1 = d.z - z;
+
+ return rot;
+ }
+
+ public Vector3f normalize(){
+ float length = length();
+ x /= length;
+ y /= length;
+ z /= length;
+ return this;
+ }
+
+ public Vector3f mul(float m){
+ x *= m;
+ y *= m;
+ z *= m;
+ return this;
+ }
+
+ public String toString(){
+ StringJoiner st = new StringJoiner(",","vec3(",")");
+ st.add("" + x);
+ st.add("" + y);
+ st.add("" + z);
+ return st.toString();
+ }
+
+ public Vector3f toRadians() {
+ x = Mathf.toRadians(x);
+ y = Mathf.toRadians(y);
+ z = Mathf.toRadians(z);
+ return this;
+ }
+
+ public Vector3f toDegrees() {
+ x = Mathf.toDegrees(x);
+ y = Mathf.toDegrees(y);
+ z = Mathf.toDegrees(z);
+ return this;
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/math/Vector4f.java b/src/fr/technicalgames/math/Vector4f.java
similarity index 92%
rename from Diffuse light/src/fr/technicalgames/math/Vector4f.java
rename to src/fr/technicalgames/math/Vector4f.java
index bb869c2..67e597f 100644
--- a/Diffuse light/src/fr/technicalgames/math/Vector4f.java
+++ b/src/fr/technicalgames/math/Vector4f.java
@@ -1,56 +1,56 @@
-package fr.technicalgames.math;
-
-public class Vector4f {
-
- public float x,y,z,w;
-
- public Vector4f(float x,float y,float z,float w){
- this.x = x;
- this.y = y;
- this.z = z;
- this.w = w;
- }
-
- public Vector4f(Vector3f v,float w){
- this.x = v.x;
- this.y = v.y;
- this.z = v.z;
- this.w = w;
- }
-
- public float getX() {
- return x;
- }
-
- public void setX(float x) {
- this.x = x;
- }
-
- public float getY() {
- return y;
- }
-
- public void setY(float y) {
- this.y = y;
- }
-
- public float getZ() {
- return z;
- }
-
- public void setZ(float z) {
- this.z = z;
- }
-
- public float getW() {
- return w;
- }
-
- public void setW(float w) {
- this.w = w;
- }
-
-
-
-
-}
+package fr.technicalgames.math;
+
+public class Vector4f {
+
+ public float x,y,z,w;
+
+ public Vector4f(float x,float y,float z,float w){
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.w = w;
+ }
+
+ public Vector4f(Vector3f v,float w){
+ this.x = v.x;
+ this.y = v.y;
+ this.z = v.z;
+ this.w = w;
+ }
+
+ public float getX() {
+ return x;
+ }
+
+ public void setX(float x) {
+ this.x = x;
+ }
+
+ public float getY() {
+ return y;
+ }
+
+ public void setY(float y) {
+ this.y = y;
+ }
+
+ public float getZ() {
+ return z;
+ }
+
+ public void setZ(float z) {
+ this.z = z;
+ }
+
+ public float getW() {
+ return w;
+ }
+
+ public void setW(float w) {
+ this.w = w;
+ }
+
+
+
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/render/Asset.java b/src/fr/technicalgames/render/Asset.java
similarity index 97%
rename from Diffuse light/src/fr/technicalgames/render/Asset.java
rename to src/fr/technicalgames/render/Asset.java
index 64bff13..4bacadd 100644
--- a/Diffuse light/src/fr/technicalgames/render/Asset.java
+++ b/src/fr/technicalgames/render/Asset.java
@@ -1,133 +1,133 @@
-package fr.technicalgames.render;
-import java.nio.*;
-import java.util.*;
-
-import org.lwjgl.*;
-import org.lwjgl.opengl.*;
-
-import fr.technicalgames.light.*;
-import fr.technicalgames.material.*;
-import fr.technicalgames.math.*;
-
-public class Asset {
-
- public int vbo,vao;
- public Texture texture;
- public Matrix4f transform;
- public Material material;
- private int size;
-
- public Asset(){
- texture = Texture.WOOD;
- transform = new Matrix4f();
- material = new DefaultMaterial();
- vao = GL30.glGenVertexArrays();
- vbo = GL15.glGenBuffers();
- float[] a = new float[]{
- // X Y Z U V Normal
- // bottom
- -1.0f,-1.0f,-1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f,
- 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, -1.0f, 0.0f,
- -1.0f,-1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,
- 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, -1.0f, 0.0f,
- 1.0f,-1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, 0.0f,
- -1.0f,-1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,
-
- // top
- -1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
- -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,
- 1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,
- 1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,
- -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,
- 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
-
- // front
- -1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,
- 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f,
- -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
- 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f,
- 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
- -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
-
- // back
- -1.0f,-1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f,
- -1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, 0.0f, -1.0f,
- 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f,
- 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f,
- -1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, 0.0f, -1.0f,
- 1.0f, 1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, -1.0f,
-
- // left
- -1.0f,-1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f,
- -1.0f, 1.0f,-1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,
- -1.0f,-1.0f,-1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,
- -1.0f,-1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f,
- -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f,
- -1.0f, 1.0f,-1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,
-
- // right
- 1.0f,-1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f,
- 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f,
- 1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
- 1.0f,-1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f,
- 1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
- 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f
- };
- FloatBuffer buffer = BufferUtils.createFloatBuffer(a.length);
- buffer.put(a).flip();
- size = a.length/(3+2+3);
- GL30.glBindVertexArray(vao);
- GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
- GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
-
- GL20.glEnableVertexAttribArray(Shaders.MAIN_LIGHT.getAttribLocation("vert"));
- GL20.glVertexAttribPointer(Shaders.MAIN_LIGHT.getAttribLocation("vert"), 3, GL11.GL_FLOAT, false, 8*4, 0);
-
- GL20.glEnableVertexAttribArray(Shaders.MAIN_LIGHT.getAttribLocation("vertTexCoord"));
- GL20.glVertexAttribPointer(Shaders.MAIN_LIGHT.getAttribLocation("vertTexCoord"), 2, GL11.GL_FLOAT, true, 8*4, 3*4);
-
- GL20.glEnableVertexAttribArray(Shaders.MAIN_LIGHT.getAttribLocation("vertNormal"));
- GL20.glVertexAttribPointer(Shaders.MAIN_LIGHT.getAttribLocation("vertNormal"), 3, GL11.GL_FLOAT, true, 8*4, 5*4);
-
- GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
- GL30.glBindVertexArray(0);
- }
-
- public void render(ArrayList lights){
- Shaders.MAIN_LIGHT.bind();
- Shaders.MAIN_LIGHT.uniform("camera", Camera.matrix);
- Shaders.MAIN_LIGHT.uniform("transform", transform);
- Shaders.MAIN_LIGHT.uniform("projection", DisplayManager.projection);
- Shaders.MAIN_LIGHT.uniform("materialTex", 0); //set to 0 because the texture will be bound to GL_TEXTURE0
- Shaders.MAIN_LIGHT.uniform("materialShininess", material.shininess);
- Shaders.MAIN_LIGHT.uniform("materialSpecularColor", material.specularColor);
- Shaders.MAIN_LIGHT.uniform("numLights", lights.size());
- Shaders.MAIN_LIGHT.uniform("cameraPosition", Camera.pos);
-
- for(int i = 0;i < lights.size();i++){
- Shaders.MAIN_LIGHT.uniform("allLights["+i+"].position", lights.get(i).position);
- Shaders.MAIN_LIGHT.uniform("allLights["+i+"].intensities", lights.get(i).intensities);
- Shaders.MAIN_LIGHT.uniform("allLights["+i+"].attenuation", lights.get(i).attenuation);
- Shaders.MAIN_LIGHT.uniform("allLights["+i+"].ambientCoefficient", lights.get(i).ambientCoefficient);
- Shaders.MAIN_LIGHT.uniform("allLights["+i+"].coneAngle", lights.get(i).coneAngle);
- Shaders.MAIN_LIGHT.uniform("allLights["+i+"].coneDirection", lights.get(i).coneDirection);
- }
-
- GL13.glActiveTexture(GL13.GL_TEXTURE0);
- texture.bind();
-
- GL30.glBindVertexArray(vao);
- GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, size);
- GL30.glBindVertexArray(0);
- texture.unbind();
- Shaders.MAIN_LIGHT.unbind();
- }
-
- public void destroy(){
- GL15.glDeleteBuffers(vbo);
- GL30.glBindVertexArray(vao);
- texture.destroy();
- transform = null;
- }
-
-}
+package fr.technicalgames.render;
+import java.nio.*;
+import java.util.*;
+
+import org.lwjgl.*;
+import org.lwjgl.opengl.*;
+
+import fr.technicalgames.light.*;
+import fr.technicalgames.material.*;
+import fr.technicalgames.math.*;
+
+public class Asset {
+
+ public int vbo,vao;
+ public Texture texture;
+ public Matrix4f transform;
+ public Material material;
+ private int size;
+
+ public Asset(){
+ texture = Texture.WOOD;
+ transform = new Matrix4f();
+ material = new DefaultMaterial();
+ vao = GL30.glGenVertexArrays();
+ vbo = GL15.glGenBuffers();
+ float[] a = new float[]{
+ // X Y Z U V Normal
+ // bottom
+ -1.0f,-1.0f,-1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f,
+ 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, -1.0f, 0.0f,
+ -1.0f,-1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,
+ 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, -1.0f, 0.0f,
+ 1.0f,-1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, 0.0f,
+ -1.0f,-1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,
+
+ // top
+ -1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
+ -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,
+ 1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,
+ 1.0f, 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,
+ -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,
+ 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
+
+ // front
+ -1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,
+ 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f,
+ -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
+ 1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f,
+ 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
+ -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
+
+ // back
+ -1.0f,-1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f,
+ -1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, 0.0f, -1.0f,
+ 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f,
+ 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f,
+ -1.0f, 1.0f,-1.0f, 0.0f, 1.0f, 0.0f, 0.0f, -1.0f,
+ 1.0f, 1.0f,-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, -1.0f,
+
+ // left
+ -1.0f,-1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f,
+ -1.0f, 1.0f,-1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,
+ -1.0f,-1.0f,-1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,
+ -1.0f,-1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f,
+ -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f,
+ -1.0f, 1.0f,-1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,
+
+ // right
+ 1.0f,-1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f,
+ 1.0f,-1.0f,-1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f,
+ 1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
+ 1.0f,-1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f,
+ 1.0f, 1.0f,-1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
+ 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f
+ };
+ FloatBuffer buffer = BufferUtils.createFloatBuffer(a.length);
+ buffer.put(a).flip();
+ size = a.length/(3+2+3);
+ GL30.glBindVertexArray(vao);
+ GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
+ GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
+
+ GL20.glEnableVertexAttribArray(Shaders.MAIN_LIGHT.getAttribLocation("vert"));
+ GL20.glVertexAttribPointer(Shaders.MAIN_LIGHT.getAttribLocation("vert"), 3, GL11.GL_FLOAT, false, 8*4, 0);
+
+ GL20.glEnableVertexAttribArray(Shaders.MAIN_LIGHT.getAttribLocation("vertTexCoord"));
+ GL20.glVertexAttribPointer(Shaders.MAIN_LIGHT.getAttribLocation("vertTexCoord"), 2, GL11.GL_FLOAT, true, 8*4, 3*4);
+
+ GL20.glEnableVertexAttribArray(Shaders.MAIN_LIGHT.getAttribLocation("vertNormal"));
+ GL20.glVertexAttribPointer(Shaders.MAIN_LIGHT.getAttribLocation("vertNormal"), 3, GL11.GL_FLOAT, true, 8*4, 5*4);
+
+ GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
+ GL30.glBindVertexArray(0);
+ }
+
+ public void render(ArrayList lights){
+ Shaders.MAIN_LIGHT.bind();
+ Shaders.MAIN_LIGHT.uniform("camera", Camera.matrix);
+ Shaders.MAIN_LIGHT.uniform("transform", transform);
+ Shaders.MAIN_LIGHT.uniform("projection", DisplayManager.projection);
+ Shaders.MAIN_LIGHT.uniform("materialTex", 0); //set to 0 because the texture will be bound to GL_TEXTURE0
+ Shaders.MAIN_LIGHT.uniform("materialShininess", material.shininess);
+ Shaders.MAIN_LIGHT.uniform("materialSpecularColor", material.specularColor);
+ Shaders.MAIN_LIGHT.uniform("numLights", lights.size());
+ Shaders.MAIN_LIGHT.uniform("cameraPosition", Camera.pos);
+
+ for(int i = 0;i < lights.size();i++){
+ Shaders.MAIN_LIGHT.uniform("allLights["+i+"].position", lights.get(i).position);
+ Shaders.MAIN_LIGHT.uniform("allLights["+i+"].intensities", lights.get(i).intensities);
+ Shaders.MAIN_LIGHT.uniform("allLights["+i+"].attenuation", lights.get(i).attenuation);
+ Shaders.MAIN_LIGHT.uniform("allLights["+i+"].ambientCoefficient", lights.get(i).ambientCoefficient);
+ Shaders.MAIN_LIGHT.uniform("allLights["+i+"].coneAngle", lights.get(i).coneAngle);
+ Shaders.MAIN_LIGHT.uniform("allLights["+i+"].coneDirection", lights.get(i).coneDirection);
+ }
+
+ GL13.glActiveTexture(GL13.GL_TEXTURE0);
+ texture.bind();
+
+ GL30.glBindVertexArray(vao);
+ GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, size);
+ GL30.glBindVertexArray(0);
+ texture.unbind();
+ Shaders.MAIN_LIGHT.unbind();
+ }
+
+ public void destroy(){
+ GL15.glDeleteBuffers(vbo);
+ GL30.glBindVertexArray(vao);
+ texture.destroy();
+ transform = null;
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/render/Camera.java b/src/fr/technicalgames/render/Camera.java
similarity index 96%
rename from Diffuse light/src/fr/technicalgames/render/Camera.java
rename to src/fr/technicalgames/render/Camera.java
index 1306752..732f81a 100644
--- a/Diffuse light/src/fr/technicalgames/render/Camera.java
+++ b/src/fr/technicalgames/render/Camera.java
@@ -1,67 +1,67 @@
-package fr.technicalgames.render;
-import static org.lwjgl.glfw.GLFW.*;
-
-import org.lwjgl.glfw.*;
-import org.lwjgl.opengl.*;
-
-import fr.technicalgames.*;
-import fr.technicalgames.input.*;
-import fr.technicalgames.math.*;
-
-
-
-public class Camera {
-
- public static Matrix4f matrix = new Matrix4f();
- public static final float SPEED = 1.0f;
- public static final float sens = 0.5f;
- public static float speed = 1.0f;
-
-
-
- public static Vector3f rot = new Vector3f();
- public static Vector3f pos = new Vector3f();
-
- public static void update(){
- speed = SPEED * Main.delta;
- if(Input.isKey(GLFW_KEY_LEFT_CONTROL))speed *= 2.0f;
- rot.x += -Input.getDMouse().getY() * sens;
- rot.y += -Input.getDMouse().getX() * sens;
- if(rot.x > 90)rot.x = 90;
- if(rot.x < -90)rot.x = -90;
- if(Input.isKey(GLFW.GLFW_KEY_W)){
- pos.x += Mathf.cos(Mathf.toRadians(rot.y + 90)) * speed;
- pos.z += Mathf.sin(Mathf.toRadians(rot.y + 90)) * speed;
- }
- if(Input.isKey(GLFW.GLFW_KEY_S)){
- pos.x += -Mathf.cos(Mathf.toRadians(rot.y + 90)) * speed;
- pos.z += -Mathf.sin(Mathf.toRadians(rot.y + 90)) * speed;
- }
- if(Input.isKey(GLFW.GLFW_KEY_A)){
- pos.x += -Mathf.cos(Mathf.toRadians(rot.y)) * speed;
- pos.z += -Mathf.sin(Mathf.toRadians(rot.y)) * speed;
- }
- if(Input.isKey(GLFW.GLFW_KEY_D)){
- pos.x += Mathf.cos(Mathf.toRadians(rot.y)) * speed;
- pos.z += Mathf.sin(Mathf.toRadians(rot.y)) * speed;
- }
- if(Input.isKey(GLFW.GLFW_KEY_LEFT_SHIFT)){
- pos.y -= speed;
- }
- if(Input.isKey(GLFW.GLFW_KEY_SPACE)){
- pos.y += speed;
- }
- if(Input.isKeyDown(GLFW_KEY_ESCAPE))glfwSetWindowShouldClose(Main.windowID, GL11.GL_TRUE);
- if(Input.isButtonDown(0))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
- if(Input.isButtonDown(1))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
- }
-
- public static void transform(){
- matrix.loadIdentity();
- matrix.rotate(new Quaternion(new Vector3f(1,0,0),rot.x));
- matrix.rotate(new Quaternion(new Vector3f(0,1,0),rot.y));
- matrix.rotate(new Quaternion(new Vector3f(0,0,1),rot.z));
- matrix.tranlate(-pos.x, -pos.y, -pos.z);
- }
-
-}
+package fr.technicalgames.render;
+import static org.lwjgl.glfw.GLFW.*;
+
+import org.lwjgl.glfw.*;
+import org.lwjgl.opengl.*;
+
+import fr.technicalgames.*;
+import fr.technicalgames.input.*;
+import fr.technicalgames.math.*;
+
+
+
+public class Camera {
+
+ public static Matrix4f matrix = new Matrix4f();
+ public static final float SPEED = 1.0f;
+ public static final float sens = 0.5f;
+ public static float speed = 1.0f;
+
+
+
+ public static Vector3f rot = new Vector3f();
+ public static Vector3f pos = new Vector3f();
+
+ public static void update(){
+ speed = SPEED * Main.delta;
+ if(Input.isKey(GLFW_KEY_LEFT_CONTROL))speed *= 2.0f;
+ rot.x += -Input.getDMouse().getY() * sens;
+ rot.y += -Input.getDMouse().getX() * sens;
+ if(rot.x > 90)rot.x = 90;
+ if(rot.x < -90)rot.x = -90;
+ if(Input.isKey(GLFW.GLFW_KEY_W)){
+ pos.x += Mathf.cos(Mathf.toRadians(rot.y + 90)) * speed;
+ pos.z += Mathf.sin(Mathf.toRadians(rot.y + 90)) * speed;
+ }
+ if(Input.isKey(GLFW.GLFW_KEY_S)){
+ pos.x += -Mathf.cos(Mathf.toRadians(rot.y + 90)) * speed;
+ pos.z += -Mathf.sin(Mathf.toRadians(rot.y + 90)) * speed;
+ }
+ if(Input.isKey(GLFW.GLFW_KEY_A)){
+ pos.x += -Mathf.cos(Mathf.toRadians(rot.y)) * speed;
+ pos.z += -Mathf.sin(Mathf.toRadians(rot.y)) * speed;
+ }
+ if(Input.isKey(GLFW.GLFW_KEY_D)){
+ pos.x += Mathf.cos(Mathf.toRadians(rot.y)) * speed;
+ pos.z += Mathf.sin(Mathf.toRadians(rot.y)) * speed;
+ }
+ if(Input.isKey(GLFW.GLFW_KEY_LEFT_SHIFT)){
+ pos.y -= speed;
+ }
+ if(Input.isKey(GLFW.GLFW_KEY_SPACE)){
+ pos.y += speed;
+ }
+ if(Input.isKeyDown(GLFW_KEY_ESCAPE))glfwSetWindowShouldClose(Main.windowID, GL11.GL_TRUE);
+ if(Input.isButtonDown(0))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
+ if(Input.isButtonDown(1))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
+ }
+
+ public static void transform(){
+ matrix.loadIdentity();
+ matrix.rotate(new Quaternion(new Vector3f(1,0,0),rot.x));
+ matrix.rotate(new Quaternion(new Vector3f(0,1,0),rot.y));
+ matrix.rotate(new Quaternion(new Vector3f(0,0,1),rot.z));
+ matrix.tranlate(-pos.x, -pos.y, -pos.z);
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/render/DisplayManager.java b/src/fr/technicalgames/render/DisplayManager.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/render/DisplayManager.java
rename to src/fr/technicalgames/render/DisplayManager.java
index 1ce832b..0f5be78 100644
--- a/Diffuse light/src/fr/technicalgames/render/DisplayManager.java
+++ b/src/fr/technicalgames/render/DisplayManager.java
@@ -1,55 +1,55 @@
-package fr.technicalgames.render;
-
-import static org.lwjgl.opengl.GL11.*;
-
-import fr.technicalgames.*;
-import fr.technicalgames.math.*;
-
-public class DisplayManager {
-
- public static Matrix4f projection = new Matrix4f();
-
- public static void clear(){
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- }
-
- public static void preRender2D(){
- projection.loadIdentity();
- projection.Ortho2D(0, Main.WIDTH, 0, Main.HEIGHT, -1, 1);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LESS);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- }
-
- public static void preRender3D(){
- projection.loadIdentity();
- projection.perspective(50.0f, (float)Main.WIDTH/(float)Main.HEIGHT, 0.1f,100.0f);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LESS);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- }
-
- public static void preRenderGUI(){
- projection.loadIdentity();
- projection.Ortho2D(0, Main.WIDTH, 0, Main.HEIGHT, -1, 1);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LESS);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- }
-
- public static void render2D(){
- Main.game.render2D();
- }
-
- public static void render3D(){
- Main.game.render3D();
- }
-
- public static void renderGUI(){
- Main.game.renderGUI();
- }
-
-}
+package fr.technicalgames.render;
+
+import static org.lwjgl.opengl.GL11.*;
+
+import fr.technicalgames.*;
+import fr.technicalgames.math.*;
+
+public class DisplayManager {
+
+ public static Matrix4f projection = new Matrix4f();
+
+ public static void clear(){
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ }
+
+ public static void preRender2D(){
+ projection.loadIdentity();
+ projection.Ortho2D(0, Main.WIDTH, 0, Main.HEIGHT, -1, 1);
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+
+ public static void preRender3D(){
+ projection.loadIdentity();
+ projection.perspective(50.0f, (float)Main.WIDTH/(float)Main.HEIGHT, 0.1f,100.0f);
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+
+ public static void preRenderGUI(){
+ projection.loadIdentity();
+ projection.Ortho2D(0, Main.WIDTH, 0, Main.HEIGHT, -1, 1);
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+
+ public static void render2D(){
+ Main.game.render2D();
+ }
+
+ public static void render3D(){
+ Main.game.render3D();
+ }
+
+ public static void renderGUI(){
+ Main.game.renderGUI();
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/render/Shaders.java b/src/fr/technicalgames/render/Shaders.java
similarity index 96%
rename from Diffuse light/src/fr/technicalgames/render/Shaders.java
rename to src/fr/technicalgames/render/Shaders.java
index 93388fb..6a74d80 100644
--- a/Diffuse light/src/fr/technicalgames/render/Shaders.java
+++ b/src/fr/technicalgames/render/Shaders.java
@@ -1,96 +1,96 @@
-package fr.technicalgames.render;
-import static org.lwjgl.opengl.GL11.*;
-import static org.lwjgl.opengl.GL20.*;
-
-import fr.technicalgames.input.*;
-import fr.technicalgames.math.*;
-
-public class Shaders {
-
- public int program;
-
- public static Shaders MAIN_LIGHT;
-
- static{
- try {
- MAIN_LIGHT = new Shaders("res/shaders/light.vert","res/shaders/light.frag");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public Shaders(String vertexFile,String fragmentFile) throws Exception{
- String fragmentShader = IO.loadFile(fragmentFile);
- String vertexShader = IO.loadFile(vertexFile);
-
- if(program != -1)glDeleteProgram(program);
- program = glCreateProgram();
- int vert = glCreateShader(GL_VERTEX_SHADER);
- int frag = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(vert, vertexShader);
- glShaderSource(frag, fragmentShader);
- glCompileShader(vert);
- if (glGetShaderi(vert, GL_COMPILE_STATUS) == GL_FALSE) {
- System.err.println(glGetShaderInfoLog(vert, 2048));
- System.exit(1);
- }else{
- System.out.println("Vertex compiled !");
- }
- glCompileShader(frag);
- if (glGetShaderi(frag, GL_COMPILE_STATUS) == GL_FALSE) {
- System.err.println(glGetShaderInfoLog(frag, 2048));
- System.exit(1);
- }else{
- System.out.println("Fragment compiled !");
- }
- glAttachShader(program, vert);
- glAttachShader(program, frag);
- glLinkProgram(program);
- glValidateProgram(program);
- glDeleteShader(frag);
- glDeleteShader(vert);
- }
-
- public void bind(){
- glUseProgram(program);
- }
-
- public void unbind(){
- glUseProgram(0);
- }
-
- public int getAttribLocation(String name){
- return glGetAttribLocation(program, name);
- }
-
- public void destroy(){
- if(program == 0)return;
- if(glIsProgram(program))unbind();
- glDeleteProgram(program);
- }
-
- public void uniform(String name,float v){
- glUniform1f(glGetUniformLocation(program, name), v);
- }
-
- public void uniform(String name,Vector3f vec){
- glUniform3f(glGetUniformLocation(program, name), vec.x,vec.y,vec.z);
- }
-
- public void uniform(String name,Vector4f vec){
- glUniform4f(glGetUniformLocation(program, name), vec.x,vec.y,vec.z,vec.w);
- }
-
- public void uniform(String name,Matrix4f mat){
- glUniformMatrix4fv(glGetUniformLocation(program, name),true, mat.getBuffer());
- }
-
- public void uniform(String name, Color4f v) {
- glUniform4f(glGetUniformLocation(program, name), v.getR(),v.getG(),v.getB(),v.getA());
- }
-
- public void uniform(String name,int v){
- glUniform1i(glGetUniformLocation(program,name), v);
- }
-
-}
+package fr.technicalgames.render;
+import static org.lwjgl.opengl.GL11.*;
+import static org.lwjgl.opengl.GL20.*;
+
+import fr.technicalgames.input.*;
+import fr.technicalgames.math.*;
+
+public class Shaders {
+
+ public int program;
+
+ public static Shaders MAIN_LIGHT;
+
+ static{
+ try {
+ MAIN_LIGHT = new Shaders("res/shaders/light.vert","res/shaders/light.frag");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public Shaders(String vertexFile,String fragmentFile) throws Exception{
+ String fragmentShader = IO.loadFile(fragmentFile);
+ String vertexShader = IO.loadFile(vertexFile);
+
+ if(program != -1)glDeleteProgram(program);
+ program = glCreateProgram();
+ int vert = glCreateShader(GL_VERTEX_SHADER);
+ int frag = glCreateShader(GL_FRAGMENT_SHADER);
+ glShaderSource(vert, vertexShader);
+ glShaderSource(frag, fragmentShader);
+ glCompileShader(vert);
+ if (glGetShaderi(vert, GL_COMPILE_STATUS) == GL_FALSE) {
+ System.err.println(glGetShaderInfoLog(vert, 2048));
+ System.exit(1);
+ }else{
+ System.out.println("Vertex compiled !");
+ }
+ glCompileShader(frag);
+ if (glGetShaderi(frag, GL_COMPILE_STATUS) == GL_FALSE) {
+ System.err.println(glGetShaderInfoLog(frag, 2048));
+ System.exit(1);
+ }else{
+ System.out.println("Fragment compiled !");
+ }
+ glAttachShader(program, vert);
+ glAttachShader(program, frag);
+ glLinkProgram(program);
+ glValidateProgram(program);
+ glDeleteShader(frag);
+ glDeleteShader(vert);
+ }
+
+ public void bind(){
+ glUseProgram(program);
+ }
+
+ public void unbind(){
+ glUseProgram(0);
+ }
+
+ public int getAttribLocation(String name){
+ return glGetAttribLocation(program, name);
+ }
+
+ public void destroy(){
+ if(program == 0)return;
+ if(glIsProgram(program))unbind();
+ glDeleteProgram(program);
+ }
+
+ public void uniform(String name,float v){
+ glUniform1f(glGetUniformLocation(program, name), v);
+ }
+
+ public void uniform(String name,Vector3f vec){
+ glUniform3f(glGetUniformLocation(program, name), vec.x,vec.y,vec.z);
+ }
+
+ public void uniform(String name,Vector4f vec){
+ glUniform4f(glGetUniformLocation(program, name), vec.x,vec.y,vec.z,vec.w);
+ }
+
+ public void uniform(String name,Matrix4f mat){
+ glUniformMatrix4fv(glGetUniformLocation(program, name),true, mat.getBuffer());
+ }
+
+ public void uniform(String name, Color4f v) {
+ glUniform4f(glGetUniformLocation(program, name), v.getR(),v.getG(),v.getB(),v.getA());
+ }
+
+ public void uniform(String name,int v){
+ glUniform1i(glGetUniformLocation(program,name), v);
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/render/Texture.java b/src/fr/technicalgames/render/Texture.java
similarity index 95%
rename from Diffuse light/src/fr/technicalgames/render/Texture.java
rename to src/fr/technicalgames/render/Texture.java
index d70df7e..711f3a6 100644
--- a/Diffuse light/src/fr/technicalgames/render/Texture.java
+++ b/src/fr/technicalgames/render/Texture.java
@@ -1,96 +1,96 @@
-package fr.technicalgames.render;
-import static org.lwjgl.opengl.GL11.*;
-import static org.lwjgl.opengl.GL12.*;
-
-import java.awt.image.*;
-import java.io.*;
-import java.nio.*;
-
-import javax.imageio.*;
-
-import org.lwjgl.*;
-
-public class Texture {
-
-
- public static Texture WOOD = loadTexture("res/textures/wooden-crate.jpg");
-
- int width, height;
- int id;
-
- public Texture(int width,int height,int id){
- this.id = id;
- this.width = width;
- this.height = height;
- }
-
- public static Texture loadTexture(String path){
- try {
- BufferedImage image = ImageIO.read(new File(path));
- int width = image.getWidth();
- int height = image.getHeight();
- int[] pixels = new int[width * height];
-
- image.getRGB(0, 0, width, height, pixels, 0,width);
-
- int[] data = new int[pixels.length];
- for (int i = 0; i < data.length; i++) {
- int a = (pixels[i] & 0xff000000) >> 24;
- int r = (pixels[i] & 0xff0000) >> 16;
- int g = (pixels[i] & 0xff00) >> 8;
- int b = (pixels[i] & 0xff);
-
- data[i] = a << 24 | b << 16 | g << 8 | r;
- }
-
- IntBuffer buffer = BufferUtils.createIntBuffer(data.length);
- buffer.put(data);
- buffer.flip();
-
- int id = glGenTextures();
- glBindTexture(GL_TEXTURE_2D, id);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
-
- glBindTexture(GL_TEXTURE_2D, 0);
-
- System.out.println("Texture loaded ! " + width + "x" + height + " id:" + id);
-
- return new Texture(width, height, id);
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- public int getWidth() {
- return width;
- }
-
- public int getHeight() {
- return height;
- }
-
- public int getID(){
- return id;
- }
-
- public void bind(){
- glBindTexture(GL_TEXTURE_2D, id);
- }
-
- public void unbind(){
- glBindTexture(GL_TEXTURE_2D, 0);
- }
-
- public void destroy(){
- glDeleteTextures(id);
- }
-
-}
+package fr.technicalgames.render;
+import static org.lwjgl.opengl.GL11.*;
+import static org.lwjgl.opengl.GL12.*;
+
+import java.awt.image.*;
+import java.io.*;
+import java.nio.*;
+
+import javax.imageio.*;
+
+import org.lwjgl.*;
+
+public class Texture {
+
+
+ public static Texture WOOD = loadTexture("res/textures/wooden-crate.jpg");
+
+ int width, height;
+ int id;
+
+ public Texture(int width,int height,int id){
+ this.id = id;
+ this.width = width;
+ this.height = height;
+ }
+
+ public static Texture loadTexture(String path){
+ try {
+ BufferedImage image = ImageIO.read(new File(path));
+ int width = image.getWidth();
+ int height = image.getHeight();
+ int[] pixels = new int[width * height];
+
+ image.getRGB(0, 0, width, height, pixels, 0,width);
+
+ int[] data = new int[pixels.length];
+ for (int i = 0; i < data.length; i++) {
+ int a = (pixels[i] & 0xff000000) >> 24;
+ int r = (pixels[i] & 0xff0000) >> 16;
+ int g = (pixels[i] & 0xff00) >> 8;
+ int b = (pixels[i] & 0xff);
+
+ data[i] = a << 24 | b << 16 | g << 8 | r;
+ }
+
+ IntBuffer buffer = BufferUtils.createIntBuffer(data.length);
+ buffer.put(data);
+ buffer.flip();
+
+ int id = glGenTextures();
+ glBindTexture(GL_TEXTURE_2D, id);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+
+ System.out.println("Texture loaded ! " + width + "x" + height + " id:" + id);
+
+ return new Texture(width, height, id);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public int getID(){
+ return id;
+ }
+
+ public void bind(){
+ glBindTexture(GL_TEXTURE_2D, id);
+ }
+
+ public void unbind(){
+ glBindTexture(GL_TEXTURE_2D, 0);
+ }
+
+ public void destroy(){
+ glDeleteTextures(id);
+ }
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/render/gui/GLFont.java b/src/fr/technicalgames/render/gui/GLFont.java
similarity index 93%
rename from Diffuse light/src/fr/technicalgames/render/gui/GLFont.java
rename to src/fr/technicalgames/render/gui/GLFont.java
index a46949b..ceaac96 100644
--- a/Diffuse light/src/fr/technicalgames/render/gui/GLFont.java
+++ b/src/fr/technicalgames/render/gui/GLFont.java
@@ -1,24 +1,24 @@
-package fr.technicalgames.render.gui;
-
-import java.awt.*;
-import java.awt.image.*;
-import java.nio.*;
-
-public class GLFont {
-
- private Font font;
- private int textureFont;
-
- public GLFont(String name,int style,int size){
- this.font = new Font(name, style, size);
-
-
-
- }
-
- public GLFont(){
- this("Verdana",Font.BOLD,24);
- }
-
-
-}
+package fr.technicalgames.render.gui;
+
+import java.awt.*;
+import java.awt.image.*;
+import java.nio.*;
+
+public class GLFont {
+
+ private Font font;
+ private int textureFont;
+
+ public GLFont(String name,int style,int size){
+ this.font = new Font(name, style, size);
+
+
+
+ }
+
+ public GLFont(){
+ this("Verdana",Font.BOLD,24);
+ }
+
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/render/gui/GUIComponent.java b/src/fr/technicalgames/render/gui/GUIComponent.java
similarity index 93%
rename from Diffuse light/src/fr/technicalgames/render/gui/GUIComponent.java
rename to src/fr/technicalgames/render/gui/GUIComponent.java
index 258eeb1..133e8b7 100644
--- a/Diffuse light/src/fr/technicalgames/render/gui/GUIComponent.java
+++ b/src/fr/technicalgames/render/gui/GUIComponent.java
@@ -1,9 +1,9 @@
-package fr.technicalgames.render.gui;
-
-import fr.technicalgames.math.*;
-
-public abstract class GUIComponent {
-
- private Vector2f pos;
-
-}
+package fr.technicalgames.render.gui;
+
+import fr.technicalgames.math.*;
+
+public abstract class GUIComponent {
+
+ private Vector2f pos;
+
+}
diff --git a/Diffuse light/src/fr/technicalgames/shadow/Shadow.java b/src/fr/technicalgames/shadow/Shadow.java
similarity index 96%
rename from Diffuse light/src/fr/technicalgames/shadow/Shadow.java
rename to src/fr/technicalgames/shadow/Shadow.java
index f75aa85..b77aeed 100644
--- a/Diffuse light/src/fr/technicalgames/shadow/Shadow.java
+++ b/src/fr/technicalgames/shadow/Shadow.java
@@ -1,73 +1,73 @@
-package fr.technicalgames.shadow;
-
-import org.lwjgl.opengl.*;
-
-public class Shadow {
-
- public static final int SIZE_OF_SHADOW_MAPPING = 1024;
-
- private int frameBuffer;
- private int depthTexture;
- private boolean success = false;
-
- public Shadow(){
- //Creer et selectionne le buffer
-// this.frameBuffer = GL30.glGenFramebuffers();
-// GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, this.frameBuffer);
-//
-// //Creer la texture pour les ombres
-// this.depthTexture = GL11.glGenTextures();
-// GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.depthTexture);
-// GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT16,SIZE_OF_SHADOW_MAPPING,SIZE_OF_SHADOW_MAPPING,0,GL11.GL_DEPTH_COMPONENT,GL11.GL_FLOAT,0);
-// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
-// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
-// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
-// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
-//
-// GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, depthTexture, 0);
-// GL11.glDrawBuffer(GL11.GL_NONE);
-// GL11.glReadBuffer(GL11.GL_NONE);
-// if(GL30.glCheckFramebufferStatus(GL30.GL_FRAMEBUFFER) == GL30.GL_FRAMEBUFFER_COMPLETE){
-// success = true;
-// }else{
-// success = false;
-// System.err.println("Shadow not adding to light");
-// }
- }
-
- public void render(){
-
- }
-
- public void destroy(){
- if(this.frameBuffer != 0)GL30.glDeleteFramebuffers(this.frameBuffer);
- if(this.depthTexture != 0)GL11.glDeleteTextures(this.depthTexture);
- }
-
- public int getFrameBuffer() {
- return frameBuffer;
- }
-
- public void setFrameBuffer(int frameBuffer) {
- this.frameBuffer = frameBuffer;
- }
-
- public int getDepthTexture() {
- return depthTexture;
- }
-
- public void setDepthTexture(int depthTexture) {
- this.depthTexture = depthTexture;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-
-
-
-}
+package fr.technicalgames.shadow;
+
+import org.lwjgl.opengl.*;
+
+public class Shadow {
+
+ public static final int SIZE_OF_SHADOW_MAPPING = 1024;
+
+ private int frameBuffer;
+ private int depthTexture;
+ private boolean success = false;
+
+ public Shadow(){
+ //Creer et selectionne le buffer
+// this.frameBuffer = GL30.glGenFramebuffers();
+// GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, this.frameBuffer);
+//
+// //Creer la texture pour les ombres
+// this.depthTexture = GL11.glGenTextures();
+// GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.depthTexture);
+// GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT16,SIZE_OF_SHADOW_MAPPING,SIZE_OF_SHADOW_MAPPING,0,GL11.GL_DEPTH_COMPONENT,GL11.GL_FLOAT,0);
+// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
+// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
+// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
+//
+// GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, depthTexture, 0);
+// GL11.glDrawBuffer(GL11.GL_NONE);
+// GL11.glReadBuffer(GL11.GL_NONE);
+// if(GL30.glCheckFramebufferStatus(GL30.GL_FRAMEBUFFER) == GL30.GL_FRAMEBUFFER_COMPLETE){
+// success = true;
+// }else{
+// success = false;
+// System.err.println("Shadow not adding to light");
+// }
+ }
+
+ public void render(){
+
+ }
+
+ public void destroy(){
+ if(this.frameBuffer != 0)GL30.glDeleteFramebuffers(this.frameBuffer);
+ if(this.depthTexture != 0)GL11.glDeleteTextures(this.depthTexture);
+ }
+
+ public int getFrameBuffer() {
+ return frameBuffer;
+ }
+
+ public void setFrameBuffer(int frameBuffer) {
+ this.frameBuffer = frameBuffer;
+ }
+
+ public int getDepthTexture() {
+ return depthTexture;
+ }
+
+ public void setDepthTexture(int depthTexture) {
+ this.depthTexture = depthTexture;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+
+
+}