From dc1c05546e259e03cdf28b2956472b54daefe96d Mon Sep 17 00:00:00 2001 From: austin Date: Sun, 7 Nov 2021 11:23:48 -0500 Subject: [PATCH] Fix shadow maps --- assets/Config/settings.json | 2 +- .../entity/EntityDataStrings.java | 1 + .../entity/types/creature/CreatureUtils.java | 1 + .../entity/types/item/ItemUtils.java | 1 + .../game/client/cells/DrawCell.java | 17 +++++++------ .../java/electrosphere/renderer/Mesh.java | 14 +++++++---- .../renderer/RenderingEngine.java | 25 +++++++++++++------ .../renderer/light/LightBuffer.java | 5 ---- .../renderer/light/LightManager.java | 4 ++- .../renderer/light/PointLight.java | 5 ---- 10 files changed, 43 insertions(+), 32 deletions(-) diff --git a/assets/Config/settings.json b/assets/Config/settings.json index 72c12035..cd9e6e31 100644 --- a/assets/Config/settings.json +++ b/assets/Config/settings.json @@ -13,7 +13,7 @@ "graphicsPerformanceDrawShadows" : true, "graphicsDebugDrawCollisionSpheres" : false, - "graphicsDebugDrawPhysicsObjects" : true, + "graphicsDebugDrawPhysicsObjects" : false, "graphicsDebugDrawMovementVectors" : false, "graphicsDebugDrawNavmesh" : false diff --git a/src/main/java/electrosphere/entity/EntityDataStrings.java b/src/main/java/electrosphere/entity/EntityDataStrings.java index 14742ad0..7224e0a3 100644 --- a/src/main/java/electrosphere/entity/EntityDataStrings.java +++ b/src/main/java/electrosphere/entity/EntityDataStrings.java @@ -16,6 +16,7 @@ public class EntityDataStrings { public static final String DATA_STRING_MODEL_PATH = "modelPath"; public static final String DATA_STRING_ACTOR = "actor"; public static final String DATA_STRING_DRAW = "drawFlag"; + public static final String DRAW_CAST_SHADOW = "castShadow"; /* diff --git a/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java b/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java index b125b84a..729c9bfa 100644 --- a/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java +++ b/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java @@ -147,6 +147,7 @@ public class CreatureUtils { rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_IS_CREATURE, true); rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_TYPE, type); rVal.putData(EntityDataStrings.DATA_STRING_MOVEMENT_VECTOR, new Vector3f(0,0,1)); + rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true); return rVal; } diff --git a/src/main/java/electrosphere/entity/types/item/ItemUtils.java b/src/main/java/electrosphere/entity/types/item/ItemUtils.java index cb27f799..aacc66f2 100644 --- a/src/main/java/electrosphere/entity/types/item/ItemUtils.java +++ b/src/main/java/electrosphere/entity/types/item/ItemUtils.java @@ -91,6 +91,7 @@ public class ItemUtils { break; } } + rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true); rVal.putData(EntityDataStrings.ITEM_IS_ITEM, true); rVal.putData(EntityDataStrings.ITEM_TYPE, name); // rVal.putData(EntityDataStrings.DATA_STRING_SCALE, new Vector3f(0.005f,0.005f,0.005f)); diff --git a/src/main/java/electrosphere/game/client/cells/DrawCell.java b/src/main/java/electrosphere/game/client/cells/DrawCell.java index 03a992f1..8c030a1b 100644 --- a/src/main/java/electrosphere/game/client/cells/DrawCell.java +++ b/src/main/java/electrosphere/game/client/cells/DrawCell.java @@ -38,16 +38,16 @@ public class DrawCell { CollisionObject physicsObject; - static Texture groundTextureOne; - static Texture groundTextureTwo; - static Texture groundTextureThree; - static Texture groundTextureFour; + static Texture groundTextureOne = new Texture("/Textures/Ground/GrassTileable.png"); + static Texture groundTextureTwo = new Texture("/Textures/Ground/Dirt1.png"); + static Texture groundTextureThree = new Texture("/Textures/Ground/Dirt1.png"); + static Texture groundTextureFour = new Texture("/Textures/Ground/Dirt1.png"); static { - groundTextureOne = new Texture("/Textures/Ground/GrassTileable.png"); - groundTextureTwo = new Texture("/Textures/Ground/Dirt1.png"); - groundTextureThree = new Texture("/Textures/Ground/Dirt1.png"); - groundTextureFour = new Texture("/Textures/Ground/Dirt1.png"); +// groundTextureOne = new Texture("/Textures/Ground/GrassTileable.png"); +// groundTextureTwo = new Texture("/Textures/Ground/Dirt1.png"); +// groundTextureThree = new Texture("/Textures/Ground/Dirt1.png"); +// groundTextureFour = new Texture("/Textures/Ground/Dirt1.png"); } @@ -103,6 +103,7 @@ public class DrawCell { String terrainModelPath = Globals.assetManager.registerModel(terrainModel); modelEntity = EntityUtils.spawnDrawableEntity(terrainModelPath); modelEntity.putData(EntityDataStrings.TERRAIN_IS_TERRAIN, true); + modelEntity.putData(EntityDataStrings.DRAW_CAST_SHADOW, true); LoggerInterface.loggerRenderer.INFO("New cell @ " + cellX * dynamicInterpolationRatio + "," + cellY * dynamicInterpolationRatio); EntityUtils.getPosition(modelEntity).set(new Vector3f(cellX * dynamicInterpolationRatio, 0.0f, cellY * dynamicInterpolationRatio)); } diff --git a/src/main/java/electrosphere/renderer/Mesh.java b/src/main/java/electrosphere/renderer/Mesh.java index 2bc40f37..51ef5484 100644 --- a/src/main/java/electrosphere/renderer/Mesh.java +++ b/src/main/java/electrosphere/renderer/Mesh.java @@ -772,11 +772,7 @@ public class Mesh { glBindVertexArray(vertexArrayObject); - if(useShadowMap){ - glActiveTexture(GL_TEXTURE3); - glBindTexture(GL_TEXTURE_2D, Globals.shadowMapTextureLoc); - glUniform1i(glGetUniformLocation(Globals.renderingEngine.getActiveShader().shaderProgram, "shadowMap"), 4); - } + if(useTextureList){ int i = 0; @@ -798,6 +794,12 @@ public class Mesh { // glActiveTexture(GL_TEXTURE0); } + if(useShadowMap){ + glActiveTexture(GL_TEXTURE3); + glBindTexture(GL_TEXTURE_2D, Globals.shadowMapTextureLoc); + glUniform1i(glGetUniformLocation(Globals.renderingEngine.getActiveShader().shaderProgram, "shadowMap"), 3); + } + if(setBones){ // @@ -820,6 +822,8 @@ public class Mesh { } else { glUniform1i(Globals.renderingEngine.getActiveShader().shaderVertexHasBonesLoc, 0); } + } else { + glUniform1i(Globals.renderingEngine.getActiveShader().shaderVertexHasBonesLoc, 0); } diff --git a/src/main/java/electrosphere/renderer/RenderingEngine.java b/src/main/java/electrosphere/renderer/RenderingEngine.java index 9da3bbab..daf13fb3 100644 --- a/src/main/java/electrosphere/renderer/RenderingEngine.java +++ b/src/main/java/electrosphere/renderer/RenderingEngine.java @@ -342,10 +342,13 @@ public class RenderingEngine { lightDepthBuffer.bind(); glClear(GL_DEPTH_BUFFER_BIT); + glActiveTexture(GL_TEXTURE0); +// glBindTexture(GL_TEXTURE_2D, woodTexture); +// renderScene(simpleDepthShader); - float eyeX = -20.0f; - float eyeY = 40.0f; - float eyeZ = -10.0f; + float eyeX = -10.0f; + float eyeY = 20.0f; + float eyeZ = -5.0f; float nearPlane = 0.001f; float farPlane = (float)Math.sqrt(eyeX * eyeX + eyeY * eyeY + eyeZ * eyeZ) + 20.0f; //set matrices for light render @@ -368,19 +371,26 @@ public class RenderingEngine { modelTransformMatrix = new Matrix4f(); for(Entity currentEntity : Globals.entityManager.getDrawable()){ Vector3d position = EntityUtils.getPosition(currentEntity); - if((boolean)currentEntity.getData(EntityDataStrings.DATA_STRING_DRAW) && drawPoint(cameraPos,new Vector3f((float)position.x,(float)position.y,(float)position.z))){ + if( + (boolean)currentEntity.getData(EntityDataStrings.DATA_STRING_DRAW) && + drawPoint(cameraPos,new Vector3f((float)position.x,(float)position.y,(float)position.z)) && + currentEntity.getDataKeys().contains(EntityDataStrings.DRAW_CAST_SHADOW) + ){ //fetch actor Actor currentActor = EntityUtils.getActor(currentEntity); //calculate camera-modified vector3f Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); //calculate and apply model transform - modelTransformMatrix.identity(); + modelTransformMatrix = modelTransformMatrix.identity(); modelTransformMatrix.translate(cameraModifiedPosition); modelTransformMatrix.rotate(EntityUtils.getRotation(currentEntity)); modelTransformMatrix.scale(EntityUtils.getScale(currentEntity)); currentActor.applyModelMatrix(modelTransformMatrix); //draw - currentActor.drawForDepthBuffer(); +// if(!currentEntity.getDataKeys().contains(EntityDataStrings.TERRAIN_IS_TERRAIN) && !currentEntity.getDataKeys().contains(EntityDataStrings.DATA_STRING_CREATURE_IS_CREATURE)){ + currentActor.drawForDepthBuffer(); + System.out.println(currentActor.modelPath); +// } } } @@ -635,8 +645,9 @@ public class RenderingEngine { // GL_COLOR_BUFFER_BIT, GL_NEAREST); Globals.renderingEngine.setActiveShader(screenTextureShaders); glBindVertexArray(screenTextureVAO); + //aaa glBindTexture(GL_TEXTURE_2D, screenFramebuffer.getTexturePointer()); -// glBindTexture(GL_TEXTURE_2D, lightDepthBuffer.getTexture()); +// glBindTexture(GL_TEXTURE_2D, lightDepthBuffer.getTexturePointer()); glDrawArrays(GL_TRIANGLES, 0, 6); glBindVertexArray(0); } diff --git a/src/main/java/electrosphere/renderer/light/LightBuffer.java b/src/main/java/electrosphere/renderer/light/LightBuffer.java index 66c17063..e95e4d70 100644 --- a/src/main/java/electrosphere/renderer/light/LightBuffer.java +++ b/src/main/java/electrosphere/renderer/light/LightBuffer.java @@ -1,8 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package electrosphere.renderer.light; import static org.lwjgl.opengl.GL15.*; diff --git a/src/main/java/electrosphere/renderer/light/LightManager.java b/src/main/java/electrosphere/renderer/light/LightManager.java index 7d829967..d59b7fc9 100644 --- a/src/main/java/electrosphere/renderer/light/LightManager.java +++ b/src/main/java/electrosphere/renderer/light/LightManager.java @@ -1,9 +1,11 @@ package electrosphere.renderer.light; +import java.util.List; + /** * * @author amaterasu */ public class LightManager { - + } \ No newline at end of file diff --git a/src/main/java/electrosphere/renderer/light/PointLight.java b/src/main/java/electrosphere/renderer/light/PointLight.java index f57aed52..d58bf913 100644 --- a/src/main/java/electrosphere/renderer/light/PointLight.java +++ b/src/main/java/electrosphere/renderer/light/PointLight.java @@ -1,8 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package electrosphere.renderer.light; import org.joml.Vector3f;