From 0f4d6c37e82012fcb4c097a2e86b4e29ca1f3068 Mon Sep 17 00:00:00 2001 From: "Florian Richer (MrDev023)" Date: Sat, 12 Mar 2016 17:59:49 +0100 Subject: [PATCH] Add Audio and Shadow Class --- Diffuse light/bin/.gitignore | 1 + Diffuse light/res/textures/Thumbs.db | Bin 0 -> 30208 bytes Diffuse light/src/fr/technicalgames/Main.java | 10 + .../src/fr/technicalgames/audio/Audio.java | 341 ++++++++++++++++++ .../src/fr/technicalgames/audio/Sound3D.java | 11 + .../src/fr/technicalgames/game/MainGame.java | 8 +- .../src/fr/technicalgames/light/Light.java | 4 +- .../fr/technicalgames/render/gui/GLFont.java | 24 ++ .../render/gui/GUIComponent.java | 9 + .../src/fr/technicalgames/shadow/Shadow.java | 73 ++++ 10 files changed, 479 insertions(+), 2 deletions(-) create mode 100644 Diffuse light/res/textures/Thumbs.db create mode 100644 Diffuse light/src/fr/technicalgames/audio/Audio.java create mode 100644 Diffuse light/src/fr/technicalgames/audio/Sound3D.java create mode 100644 Diffuse light/src/fr/technicalgames/render/gui/GLFont.java create mode 100644 Diffuse light/src/fr/technicalgames/render/gui/GUIComponent.java create mode 100644 Diffuse light/src/fr/technicalgames/shadow/Shadow.java diff --git a/Diffuse light/bin/.gitignore b/Diffuse light/bin/.gitignore index 44fde90..30ec721 100644 --- a/Diffuse light/bin/.gitignore +++ b/Diffuse light/bin/.gitignore @@ -1 +1,2 @@ /fr/ +/mrdev023/ diff --git a/Diffuse light/res/textures/Thumbs.db b/Diffuse light/res/textures/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..ddda0569999565ae9bf0a33adf77a1a992a4892f GIT binary patch literal 30208 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 dDDx+s6v3XlMp3 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/Diffuse light/src/fr/technicalgames/audio/Sound3D.java new file mode 100644 index 0000000..fec9da3 --- /dev/null +++ b/Diffuse light/src/fr/technicalgames/audio/Sound3D.java @@ -0,0 +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); + } + +} diff --git a/Diffuse light/src/fr/technicalgames/game/MainGame.java b/Diffuse light/src/fr/technicalgames/game/MainGame.java index 9ac5666..2adfe7e 100644 --- a/Diffuse light/src/fr/technicalgames/game/MainGame.java +++ b/Diffuse light/src/fr/technicalgames/game/MainGame.java @@ -13,7 +13,7 @@ public class MainGame extends Game{ 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,0,-10), new Vector3f(0.4f,0.3f,0.1f), 0.06f)); + lights.add(new DirectionalLight(new Vector3f(4,5,-10), new Vector3f(0.4f,0.3f,0.1f), 0.06f)); Asset as = new Asset(); @@ -31,6 +31,9 @@ public class MainGame extends Game{ 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; } @@ -66,6 +69,9 @@ public class MainGame extends Game{ for(Asset a : assets){ a.destroy(); } + for(Light l : lights){ + l.destroy(); + } } } diff --git a/Diffuse light/src/fr/technicalgames/light/Light.java b/Diffuse light/src/fr/technicalgames/light/Light.java index 8e2449f..a93f532 100644 --- a/Diffuse light/src/fr/technicalgames/light/Light.java +++ b/Diffuse light/src/fr/technicalgames/light/Light.java @@ -1,7 +1,8 @@ package fr.technicalgames.light; import fr.technicalgames.math.*; +import fr.technicalgames.shadow.*; -public abstract class Light { +public abstract class Light extends Shadow{ public Vector4f position;//w == 0 si c une directional light public Vector3f intensities; @@ -11,6 +12,7 @@ public abstract class Light { 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; diff --git a/Diffuse light/src/fr/technicalgames/render/gui/GLFont.java b/Diffuse light/src/fr/technicalgames/render/gui/GLFont.java new file mode 100644 index 0000000..a46949b --- /dev/null +++ b/Diffuse light/src/fr/technicalgames/render/gui/GLFont.java @@ -0,0 +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); + } + + +} diff --git a/Diffuse light/src/fr/technicalgames/render/gui/GUIComponent.java b/Diffuse light/src/fr/technicalgames/render/gui/GUIComponent.java new file mode 100644 index 0000000..258eeb1 --- /dev/null +++ b/Diffuse light/src/fr/technicalgames/render/gui/GUIComponent.java @@ -0,0 +1,9 @@ +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/Diffuse light/src/fr/technicalgames/shadow/Shadow.java new file mode 100644 index 0000000..f75aa85 --- /dev/null +++ b/Diffuse light/src/fr/technicalgames/shadow/Shadow.java @@ -0,0 +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; + } + + + +}