Buggy transparent shadows.

Transparent textures might glow.
This commit is contained in:
FakeShemp
2016-02-28 18:00:23 +01:00
parent 14b0a64720
commit 6dd7f1a657
8 changed files with 43 additions and 15 deletions
+3
View File
@@ -62,6 +62,7 @@ private:
GLuint m_DepthMap; GLuint m_DepthMap;
FrameBuffer m_DepthBuffer; FrameBuffer m_DepthBuffer;
ShaderProgram* m_ShadowProgram; ShaderProgram* m_ShadowProgram;
//ShaderProgram* m_TransparentShadowProgram;
std::array<glm::mat4, MAX_SPLITS> m_LightProjection; std::array<glm::mat4, MAX_SPLITS> m_LightProjection;
std::array<glm::mat4, MAX_SPLITS> m_LightView; std::array<glm::mat4, MAX_SPLITS> m_LightView;
@@ -74,6 +75,8 @@ private:
float m_SplitWeight = 0.91f; float m_SplitWeight = 0.91f;
std::array<Frustum, MAX_SPLITS> m_shadowFrusta; std::array<Frustum, MAX_SPLITS> m_shadowFrusta;
Texture* m_WhiteTexture = ResourceManager::Load<Texture>("Textures/Core/White.png");
}; };
#endif #endif
@@ -568,8 +568,8 @@
<Entity name="Cube1"> <Entity name="Cube1">
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/BushAlive.mesh</Resource>
<Color A="0.2" B="0" G="1" R="0"/> <Color A="1" B="0" G="1" R="0"/>
<Transparent>true</Transparent> <Transparent>true</Transparent>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
+2 -2
View File
@@ -327,8 +327,8 @@ void main()
totalLighting.Specular += light_result.Specular; totalLighting.Specular += light_result.Specular;
} }
totalLighting.Diffuse *= (1.5 + vec4(AmbientColor.rgb, 1.0)) - vec4(vec3(shadowFactor), 0.0); totalLighting.Diffuse *= (1.0 + vec4(AmbientColor.rgba)) - vec4(vec3(shadowFactor), 0.0);
totalLighting.Specular *= (1.5 + vec4(AmbientColor.rgb, 1.0)) - vec4(vec3(shadowFactor), 0.0); totalLighting.Specular *= (1.0 + vec4(AmbientColor.rgba)) - vec4(vec3(shadowFactor), 0.0);
//LightResult getInformation; //LightResult getInformation;
+15 -1
View File
@@ -1,10 +1,24 @@
#version 430 #version 430
layout(location = 0 ) out float ShadowMap; #define ALPHA_CUTOFF 0.3
layout (binding = 12) uniform sampler2D DiffuseTexture;
uniform float Alpha;
in VertexData{
vec2 TextureCoordinate;
}Input;
layout (location = 0) out float ShadowMap;
void main() void main()
{ {
vec4 diffuseTexel = texture(DiffuseTexture, Input.TextureCoordinate) * Alpha;
if (diffuseTexel.a < ALPHA_CUTOFF)
{
discard;
}
} }
+7 -1
View File
@@ -4,9 +4,15 @@ uniform mat4 M;
uniform mat4 V; uniform mat4 V;
uniform mat4 P; uniform mat4 P;
layout(location = 0) in vec3 Position; layout (location = 0) in vec3 Position;
layout (location = 4) in vec2 TextureCoords;
out VertexData{
vec2 TextureCoordinate;
}Output;
void main() void main()
{ {
gl_Position = P * V * M * vec4(Position, 1.0); gl_Position = P * V * M * vec4(Position, 1.0);
Output.TextureCoordinate = TextureCoords;
} }
+1 -9
View File
@@ -68,14 +68,6 @@ void Renderer::InitializeShaders()
{ {
m_BasicForwardProgram = ResourceManager::Load<ShaderProgram>("#m_BasicForwardProgram"); m_BasicForwardProgram = ResourceManager::Load<ShaderProgram>("#m_BasicForwardProgram");
m_ExplosionEffectProgram = ResourceManager::Load<ShaderProgram>("#ExplosionEffectProgram"); m_ExplosionEffectProgram = ResourceManager::Load<ShaderProgram>("#ExplosionEffectProgram");
//m_ExplosionEffectProgram->AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/ExplosionEffect.vert.glsl")));
//m_ExplosionEffectProgram->AddShader(std::shared_ptr<Shader>(new GeometryShader("Shaders/ExplosionEffect.geom.glsl")));
//m_ExplosionEffectProgram->AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/ExplosionEffect.frag.glsl")));
//m_ExplosionEffectProgram->Compile();
//m_ExplosionEffectProgram->Link();
} }
void Renderer::InputUpdate(double dt) void Renderer::InputUpdate(double dt)
@@ -93,7 +85,7 @@ void Renderer::Update(double dt)
void Renderer::Draw(RenderFrame& frame) void Renderer::Draw(RenderFrame& frame)
{ {
ImGui::Combo("Draw textures", &m_DebugTextureToDraw, "Final\0Scene\0Bloom\0Gaussian\0Picking\0Shadow"); ImGui::Combo("Draw textures", &m_DebugTextureToDraw, "Final\0Scene\0Bloom\0Gaussian\0Picking");
//clear buffer 0 //clear buffer 0
glClearColor(0.f, 0.f, 0.f, 0.f); glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+11
View File
@@ -147,6 +147,8 @@ void ShadowPass::InitializeShaderPrograms()
m_ShadowProgram->Compile(); m_ShadowProgram->Compile();
m_ShadowProgram->BindFragDataLocation(0, "ShadowMap"); m_ShadowProgram->BindFragDataLocation(0, "ShadowMap");
m_ShadowProgram->Link(); m_ShadowProgram->Link();
} }
void ShadowPass::ClearBuffer() void ShadowPass::ClearBuffer()
@@ -241,6 +243,15 @@ void ShadowPass::Draw(RenderScene & scene)
auto modelJob = std::dynamic_pointer_cast<ModelJob>(objectJob); auto modelJob = std::dynamic_pointer_cast<ModelJob>(objectJob);
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix)); glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
glUniform1f(glGetUniformLocation(shaderHandle, "Alpha"), modelJob->Color.a);
glActiveTexture(GL_TEXTURE12);
if (modelJob->DiffuseTexture != nullptr) {
glBindTexture(GL_TEXTURE_2D, modelJob->DiffuseTexture->m_Texture);
}
else {
glBindTexture(GL_TEXTURE_2D, m_WhiteTexture->m_Texture);
}
glBindVertexArray(modelJob->Model->VAO); glBindVertexArray(modelJob->Model->VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer);
+2
View File
@@ -9,6 +9,8 @@ ShadowPassState::ShadowPassState(GLuint frameBuffer)
Disable(GL_TEXTURE_2D); Disable(GL_TEXTURE_2D);
CullFace(GL_FRONT); CullFace(GL_FRONT);
ClearColor(glm::vec4(0.f, 0.f, 0.f, 0.f)); ClearColor(glm::vec4(0.f, 0.f, 0.f, 0.f));
//Enable(GL_ALPHA_TEST);
//glAlphaFunc(GL_GREATER, 0.9f);
} }
ShadowPassState::~ShadowPassState() ShadowPassState::~ShadowPassState()