Fix shadow maps

This commit is contained in:
austin 2021-11-07 11:23:48 -05:00
parent ad04661533
commit dc1c05546e
10 changed files with 43 additions and 32 deletions

View File

@ -13,7 +13,7 @@
"graphicsPerformanceDrawShadows" : true,
"graphicsDebugDrawCollisionSpheres" : false,
"graphicsDebugDrawPhysicsObjects" : true,
"graphicsDebugDrawPhysicsObjects" : false,
"graphicsDebugDrawMovementVectors" : false,
"graphicsDebugDrawNavmesh" : false

View File

@ -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";
/*

View File

@ -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;
}

View File

@ -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));

View File

@ -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));
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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.*;

View File

@ -1,9 +1,11 @@
package electrosphere.renderer.light;
import java.util.List;
/**
*
* @author amaterasu
*/
public class LightManager {
}

View File

@ -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;