Prechádzať zdrojové kódy

Better AABB handling and improved post-processing.

- Added some getters to make getting the AABB for an entity easier.
- Improved and fixed the post-processing system. It now uses an abstract
class instead of an interface.
frans 8 rokov pred
rodič
commit
aa1e055c94

+ 0 - 1
TODO.txt

@@ -1,4 +1,3 @@
-Particles and post-processing is broken.
 Texture atlases with the new model spec system.
 Multiplayer
 Modular GUIs

+ 10 - 10
src/main/java/eu/tankernn/gameEngine/MainLoop.java

@@ -65,7 +65,7 @@ public class MainLoop {
 
 	public static void main(String[] args) throws IOException {
 		DisplayManager.createDisplay("Tankernn Game Engine tester");
-		
+
 		Loader loader = new Loader(new InternalFile("models.json"));
 
 		// ### Terrain textures ###
@@ -81,11 +81,10 @@ public class MainLoop {
 		TerrainPack terrainPack = new TerrainPack(loader, texturePack, blendMap, SEED);
 
 		// Player
-		Entity entity = new Entity(0, new Vector3f(0, 0, 20), new Vector3f(0, 0, 0), 1,
-				loader.getModel(0).getRawModel().getBoundingBox());
+		Entity entity = new Entity(0, new Vector3f(0, 0, 20), new Vector3f(0, 0, 0), 1, loader.getBoundingBox(0));
 		entities.add(entity);
-		Player player = new Player(0, new Vector3f(10, 0, 50), new Vector3f(0, 0, 0), 1,
-				loader.getModel(0).getRawModel().getBoundingBox(), terrainPack);
+		Player player = new Player(0, new Vector3f(10, 0, 50), new Vector3f(0, 0, 0), 1, loader.getBoundingBox(0),
+				terrainPack);
 		entities.add(player);
 		Camera camera = new PlayerCamera(player, terrainPack);
 
@@ -105,8 +104,7 @@ public class MainLoop {
 		textMaster.loadText(text);
 
 		// Barrel
-		Entity barrel = new Entity(1, new Vector3f(75, 10, 75), new Vector3f(0, 0, 0), 1f,
-				loader.getModel(1).getRawModel().getBoundingBox());
+		Entity barrel = new Entity(1, new Vector3f(75, 10, 75), new Vector3f(0, 0, 0), 1f, loader.getBoundingBox(1));
 		entities.add(barrel);
 
 		Light sun = new Light(new Vector3f(100000, 150000, -70000), new Vector3f(1f, 1f, 1f));
@@ -124,13 +122,14 @@ public class MainLoop {
 			float z = rand.nextFloat() * 1000;
 
 			entities.add(new Entity(2, new Vector3f(x, terrainPack.getTerrainHeightByWorldPos(x, z), z), new Vector3f(),
-					1, loader.getModel(2).getRawModel().getBoundingBox()));
+					1, loader.getBoundingBox(2)));
 		}
 
 		terrainPack.addWaitingForTerrainHeight(entities.toArray(new Entity[entities.size()]));
 
 		// #### Water rendering ####
-		WaterMaster waterMaster = new WaterMaster(loader, loader.loadTexture(DUDV_MAP), loader.loadTexture(NORMAL_MAP), camera);
+		WaterMaster waterMaster = new WaterMaster(loader, loader.loadTexture(DUDV_MAP), loader.loadTexture(NORMAL_MAP),
+				camera);
 		WaterTile water = new WaterTile(75, 75, 0);
 		waterMaster.addWaterTile(water);
 
@@ -138,7 +137,7 @@ public class MainLoop {
 		List<GuiTexture> guis = new ArrayList<GuiTexture>();
 		GuiRenderer guiRenderer = new GuiRenderer(loader);
 
-		ParticleTexture particleTexture = new ParticleTexture(loader.loadTexture("particles/fire.png"), 4, false);
+		ParticleTexture particleTexture = new ParticleTexture(loader.loadTexture("particles/cosmic.png"), 4, true);
 		ParticleSystem ps = new ParticleSystem(particleTexture, 50, 10, 0.3f, 1);
 		particleMaster.addSystem(ps);
 
@@ -214,6 +213,7 @@ public class MainLoop {
 
 			multisampleFbo.resolveToFbo(GL30.GL_COLOR_ATTACHMENT0, outputFbo);
 			multisampleFbo.resolveToFbo(GL30.GL_COLOR_ATTACHMENT1, outputFbo2);
+			
 			PostProcessing.doPostProcessing(outputFbo.getColourTexture(), outputFbo2.getColourTexture());
 
 			guiRenderer.render(guis);

+ 5 - 1
src/main/java/eu/tankernn/gameEngine/loader/Loader.java

@@ -20,6 +20,7 @@ import org.lwjgl.opengl.GL20;
 import org.lwjgl.opengl.GL30;
 import org.lwjgl.opengl.GL33;
 
+import eu.tankernn.gameEngine.loader.models.AABB;
 import eu.tankernn.gameEngine.loader.models.TexturedModel;
 import eu.tankernn.gameEngine.loader.obj.ModelData;
 import eu.tankernn.gameEngine.loader.obj.ObjLoader;
@@ -223,7 +224,6 @@ public class Loader {
 			}
 
 			for (int i = 0; i < textureFiles.length; i++) {
-				System.out.println(textureFiles[i]);
 				if (textureFiles[i] == null)
 					textures[i] = null;
 				else if (cachedTextures.containsKey(textureFiles[i]))
@@ -278,4 +278,8 @@ public class Loader {
 	public TexturedModel getModel(int id) {
 		return models.get(id);
 	}
+	
+	public AABB getBoundingBox(int id) {
+		return getModel(id).getBoundingBox();
+	}
 }

+ 3 - 1
src/main/java/eu/tankernn/gameEngine/loader/models/TexturedModel.java

@@ -37,5 +37,7 @@ public class TexturedModel {
 		return texture;
 	}
 	
-	
+	public AABB getBoundingBox() {
+		return rawModel.getBoundingBox();
+	}
 }

+ 5 - 15
src/main/java/eu/tankernn/gameEngine/postProcessing/ContrastChanger.java

@@ -2,12 +2,9 @@ package eu.tankernn.gameEngine.postProcessing;
 
 import eu.tankernn.gameEngine.loader.textures.Texture;
 
-public class ContrastChanger implements IPostProcessingEffect {
-	private ImageRenderer renderer;
-	private ContrastShader shader;
-	
+public class ContrastChanger extends PostProcessingEffect<ContrastShader> {
 	public ContrastChanger() {
-		shader = new ContrastShader();
+		super(new ContrastShader());
 		renderer = new ImageRenderer();
 	}
 	
@@ -16,15 +13,8 @@ public class ContrastChanger implements IPostProcessingEffect {
 		brightTexture.bindToUnit(0);
 		renderer.renderQuad();
 		shader.stop();
-	}
-	
-	public void cleanUp() {
-		renderer.cleanUp();
-		shader.cleanUp();
-	}
-
-	@Override
-	public Texture getOutputTexture() {
-		return renderer.getOutputTexture();
+		
+		outputBrightTexture = renderer.getOutputTexture();
+		outputColorTexture = colorTexture;
 	}
 }

+ 1 - 1
src/main/java/eu/tankernn/gameEngine/postProcessing/ContrastShader.java

@@ -4,7 +4,7 @@ import eu.tankernn.gameEngine.renderEngine.shaders.ShaderProgram;
 
 public class ContrastShader extends ShaderProgram {
 	
-	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/contrastVertex.glsl";
+	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/simpleVertex.glsl";
 	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/postProcessing/contrastFragment.glsl";
 	
 	public ContrastShader() {

+ 0 - 9
src/main/java/eu/tankernn/gameEngine/postProcessing/IPostProcessingEffect.java

@@ -1,9 +0,0 @@
-package eu.tankernn.gameEngine.postProcessing;
-
-import eu.tankernn.gameEngine.loader.textures.Texture;
-
-public interface IPostProcessingEffect {
-	public void render(Texture colorTexture, Texture brightTexture);
-	public void cleanUp();
-	public Texture getOutputTexture();
-}

+ 6 - 6
src/main/java/eu/tankernn/gameEngine/postProcessing/PostProcessing.java

@@ -16,11 +16,11 @@ import eu.tankernn.gameEngine.renderEngine.RawModel;
 
 public class PostProcessing {
 
-	private static final int blurFactor = 2;
+	private static final int blurFactor = 0;
 
 	private static final float[] POSITIONS = { -1, 1, -1, -1, 1, 1, 1, -1 };
 	private static RawModel quad;
-	private static List<IPostProcessingEffect> effects = new ArrayList<IPostProcessingEffect>();
+	private static List<PostProcessingEffect<?>> effects = new ArrayList<PostProcessingEffect<?>>();
 	private static CombineFilter combineFilter;
 	
 	public static void init(Loader loader) {
@@ -36,12 +36,12 @@ public class PostProcessing {
 	}
 
 	public static void doPostProcessing(Texture colorTexture, Texture brightTexture) {
-		for (IPostProcessingEffect effect : effects) {
+		start();
+		for (PostProcessingEffect<?> effect : effects) {
 			effect.render(colorTexture, brightTexture);
-			brightTexture = effect.getOutputTexture();
+			colorTexture = effect.getOutputColorTexture();
+			brightTexture = effect.getOutputBrightTexture();
 		}
-		
-		start();
 		combineFilter.render(colorTexture, brightTexture);
 		end();
 	}

+ 29 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/PostProcessingEffect.java

@@ -0,0 +1,29 @@
+package eu.tankernn.gameEngine.postProcessing;
+
+import eu.tankernn.gameEngine.loader.textures.Texture;
+import eu.tankernn.gameEngine.renderEngine.shaders.ShaderProgram;
+
+public abstract class PostProcessingEffect<S extends ShaderProgram> {
+	protected ImageRenderer renderer;
+	protected S shader;
+	protected Texture outputColorTexture, outputBrightTexture;
+	
+	public PostProcessingEffect(S shader) {
+		this.shader = shader;
+	}
+	
+	public abstract void render(Texture colorTexture, Texture brightTexture);
+	
+	public void cleanUp() {
+		renderer.cleanUp();
+		shader.cleanUp();
+	}
+	
+	public Texture getOutputColorTexture() {
+		return outputColorTexture;
+	}
+	
+	public Texture getOutputBrightTexture() {
+		return outputBrightTexture;
+	}
+}

+ 9 - 18
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/BrightFilter.java

@@ -1,34 +1,25 @@
 package eu.tankernn.gameEngine.postProcessing.bloom;
 
 import eu.tankernn.gameEngine.loader.textures.Texture;
-import eu.tankernn.gameEngine.postProcessing.IPostProcessingEffect;
+import eu.tankernn.gameEngine.postProcessing.PostProcessingEffect;
 import eu.tankernn.gameEngine.postProcessing.ImageRenderer;
 
-public class BrightFilter implements IPostProcessingEffect {
+public class BrightFilter extends PostProcessingEffect<BrightFilterShader> {
 
-	private ImageRenderer renderer;
-	private BrightFilterShader shader;
-	
-	public BrightFilter(int width, int height){
-		shader = new BrightFilterShader();
+	public BrightFilter(int width, int height) {
+		super(new BrightFilterShader());
 		renderer = new ImageRenderer(width, height);
 	}
-	
+
 	@Override
 	public void render(Texture colorTexture, Texture brightTexture) {
 		shader.start();
 		colorTexture.bindToUnit(0);
 		renderer.renderQuad();
 		shader.stop();
+
+		outputColorTexture = colorTexture;
+		outputBrightTexture = renderer.getOutputTexture();
 	}
-	
-	public Texture getOutputTexture(){
-		return renderer.getOutputTexture();
-	}
-	
-	public void cleanUp(){
-		renderer.cleanUp();
-		shader.cleanUp();
-	}
-	
+
 }

+ 1 - 1
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/BrightFilterShader.java

@@ -4,7 +4,7 @@ import eu.tankernn.gameEngine.renderEngine.shaders.ShaderProgram;
 
 public class BrightFilterShader extends ShaderProgram{
 	
-	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/bloom/simpleVertex.glsl";
+	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/simpleVertex.glsl";
 	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/postProcessing/bloom/brightFilterFragment.glsl";
 	
 	public BrightFilterShader() {

+ 1 - 1
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/CombineShader.java

@@ -5,7 +5,7 @@ import eu.tankernn.gameEngine.renderEngine.shaders.UniformSampler;
 
 public class CombineShader extends ShaderProgram {
 
-	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/bloom/simpleVertex.glsl";
+	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/simpleVertex.glsl";
 	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/postProcessing/bloom/combineFragment.glsl";
 	
 	protected UniformSampler colourTexture = new UniformSampler("colourTexture");

+ 0 - 12
src/main/java/eu/tankernn/gameEngine/postProcessing/contrastVertex.glsl

@@ -1,12 +0,0 @@
-#version 140
-
-in vec2 position;
-
-out vec2 textureCoords;
-
-void main(void){
-
-	gl_Position = vec4(position, 0.0, 1.0);
-	textureCoords = position * 0.5 + 0.5;
-	
-}

+ 8 - 18
src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/HorizontalBlur.java

@@ -1,36 +1,26 @@
 package eu.tankernn.gameEngine.postProcessing.gaussianBlur;
 
 import eu.tankernn.gameEngine.loader.textures.Texture;
-import eu.tankernn.gameEngine.postProcessing.IPostProcessingEffect;
+import eu.tankernn.gameEngine.postProcessing.PostProcessingEffect;
 import eu.tankernn.gameEngine.postProcessing.ImageRenderer;
 
-public class HorizontalBlur implements IPostProcessingEffect {
-	
-	private ImageRenderer renderer;
-	private HorizontalBlurShader shader;
+public class HorizontalBlur extends PostProcessingEffect<HorizontalBlurShader> {
 	
 	public HorizontalBlur(int targetFboWidth, int targetFboHeight){
-		shader = new HorizontalBlurShader();
+		super(new HorizontalBlurShader());
 		shader.start();
 		shader.targetWidth.loadFloat(targetFboWidth);
 		shader.stop();
 		renderer = new ImageRenderer(targetFboWidth, targetFboHeight);
 	}
 	
-	public void render(Texture colorTexture, Texture texture){
+	public void render(Texture colorTexture, Texture brightTexture){
 		shader.start();
-		texture.bindToUnit(0);
+		colorTexture.bindToUnit(0);
 		renderer.renderQuad();
 		shader.stop();
+		
+		outputColorTexture = renderer.getOutputTexture();
+		outputBrightTexture = brightTexture;
 	}
-	
-	public Texture getOutputTexture(){
-		return renderer.getOutputTexture();
-	}
-	
-	public void cleanUp(){
-		renderer.cleanUp();
-		shader.cleanUp();
-	}
-
 }

+ 8 - 17
src/main/java/eu/tankernn/gameEngine/postProcessing/gaussianBlur/VerticalBlur.java

@@ -1,35 +1,26 @@
 package eu.tankernn.gameEngine.postProcessing.gaussianBlur;
 
 import eu.tankernn.gameEngine.loader.textures.Texture;
-import eu.tankernn.gameEngine.postProcessing.IPostProcessingEffect;
+import eu.tankernn.gameEngine.postProcessing.PostProcessingEffect;
 import eu.tankernn.gameEngine.postProcessing.ImageRenderer;
 
-public class VerticalBlur implements IPostProcessingEffect {
-	
-	private ImageRenderer renderer;
-	private VerticalBlurShader shader;
+public class VerticalBlur extends PostProcessingEffect<VerticalBlurShader> {
 	
 	public VerticalBlur(int targetFboWidth, int targetFboHeight){
-		shader = new VerticalBlurShader();
+		super(new VerticalBlurShader());
 		renderer = new ImageRenderer(targetFboWidth, targetFboHeight);
 		shader.start();
 		shader.targetHeight.loadFloat(targetFboHeight);
 		shader.stop();
 	}
 	
-	public void render(Texture colorTexture, Texture texture){
+	public void render(Texture colorTexture, Texture brightTexture){
 		shader.start();
-		texture.bindToUnit(0);
+		colorTexture.bindToUnit(0);
 		renderer.renderQuad();
 		shader.stop();
-	}
-	
-	public Texture getOutputTexture(){
-		return renderer.getOutputTexture();
-	}
-	
-	public void cleanUp(){
-		renderer.cleanUp();
-		shader.cleanUp();
+		
+		outputBrightTexture = brightTexture;
+		outputColorTexture = renderer.getOutputTexture();
 	}
 }

+ 0 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/simpleVertex.glsl → src/main/java/eu/tankernn/gameEngine/postProcessing/simpleVertex.glsl