begin fixing transparent object's shadows

This commit is contained in:
FakeShemp
2016-02-27 18:42:51 +01:00
parent 8647267cad
commit 14b0a64720
7 changed files with 51 additions and 44 deletions
@@ -569,7 +569,7 @@
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.505882382" B="0" G="1" R="0"/> <Color A="0.2" B="0" G="1" R="0"/>
<Transparent>true</Transparent> <Transparent>true</Transparent>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
+2 -2
View File
@@ -210,8 +210,8 @@ float CalcShadowValue(vec4 light_space_pos, vec3 normal, vec3 light_dir, sampler
// Various bias methods. // Various bias methods.
bias = max(0.05 * (1.0 - dot(normal, light_dir)), bias); //bias = max(0.05 * (1.0 - dot(normal, light_dir)), bias);
//bias = bias * tan(acos(clamp(dot(normal, -light_dir), 0.0, 1.0))); bias = bias * tan(acos(clamp(dot(normal, -light_dir), 0.0, 1.0)));
// Calculate coordinates in projection space. // Calculate coordinates in projection space.
+6 -7
View File
@@ -226,6 +226,12 @@ void DrawFinalPass::BindExplosionUniforms(GLuint shaderHandle, std::shared_ptr<E
glUniform4fv(glGetUniformLocation(shaderHandle, "FillColor"), 1, glm::value_ptr(job->FillColor)); glUniform4fv(glGetUniformLocation(shaderHandle, "FillColor"), 1, glm::value_ptr(job->FillColor));
glUniform1f(glGetUniformLocation(shaderHandle, "FillPercentage"), job->FillPercentage); glUniform1f(glGetUniformLocation(shaderHandle, "FillPercentage"), job->FillPercentage);
glUniform4fv(glGetUniformLocation(shaderHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); glUniform4fv(glGetUniformLocation(shaderHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor));
//Shadow
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "LightP"), MAX_SPLITS, GL_FALSE, glm::value_ptr(*m_ShadowPass->LightP().data()));
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "LightV"), MAX_SPLITS, GL_FALSE, glm::value_ptr(*m_ShadowPass->LightV().data()));
glUniform1fv(glGetUniformLocation(shaderHandle, "FarDistance"), MAX_SPLITS, m_ShadowPass->FarDistance().data());
GLERROR("END"); GLERROR("END");
} }
@@ -248,13 +254,6 @@ void DrawFinalPass::BindModelUniforms(GLuint shaderHandle, std::shared_ptr<Model
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "LightV"), MAX_SPLITS, GL_FALSE, glm::value_ptr(*m_ShadowPass->LightV().data())); glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "LightV"), MAX_SPLITS, GL_FALSE, glm::value_ptr(*m_ShadowPass->LightV().data()));
glUniform1fv(glGetUniformLocation(shaderHandle, "FarDistance"), MAX_SPLITS, m_ShadowPass->FarDistance().data()); glUniform1fv(glGetUniformLocation(shaderHandle, "FarDistance"), MAX_SPLITS, m_ShadowPass->FarDistance().data());
//GLfloat m_NearFarPlane[2] = { -40.f, 30.f };
//GLfloat m_LRBT[4] = { -40.f, 100.f, -50.f, 50.f };
//glm::mat4 m_LightProjection = glm::ortho(m_LRBT[Left], m_LRBT[Right], m_LRBT[Bottom], m_LRBT[Top], m_NearFarPlane[Near], m_NearFarPlane[Far]);
//glm::mat4 m_LightView = glm::lookAt(glm::vec3(-20.0f, 20.0f, -20.0f), glm::vec3(0.0f), glm::vec3(1.0));
//glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "LightP"), 1, GL_FALSE, glm::value_ptr(m_LightProjection));
//glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "LightV"), 1, GL_FALSE, glm::value_ptr(m_LightView));
GLERROR("END"); GLERROR("END");
} }
-3
View File
@@ -136,9 +136,6 @@ void Renderer::Draw(RenderFrame& frame)
if (m_DebugTextureToDraw == 4) { if (m_DebugTextureToDraw == 4) {
m_DrawScreenQuadPass->Draw(m_PickingPass->PickingTexture()); m_DrawScreenQuadPass->Draw(m_PickingPass->PickingTexture());
} }
if (m_DebugTextureToDraw == 5) {
m_DrawScreenQuadPass->Draw(m_ShadowPass->DepthMap());
}
m_ImGuiRenderPass->Draw(); m_ImGuiRenderPass->Draw();
glfwSwapBuffers(m_Window); glfwSwapBuffers(m_Window);
+14
View File
@@ -235,6 +235,20 @@ void ShadowPass::Draw(RenderScene & scene)
GLERROR("Shadow Draw ERROR"); GLERROR("Shadow Draw ERROR");
} }
state->CullFace(GL_BACK);
for (auto &objectJob : scene.TransparentObjects) {
auto modelJob = std::dynamic_pointer_cast<ModelJob>(objectJob);
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
glBindVertexArray(modelJob->Model->VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer);
glDrawElements(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(modelJob->StartIndex * sizeof(unsigned int)));
GLERROR("Shadow Draw ERROR");
}
state->CullFace(GL_FRONT);
} }
} }
} }
+1 -4
View File
@@ -2,16 +2,13 @@
ShadowPassState::ShadowPassState(GLuint frameBuffer) ShadowPassState::ShadowPassState(GLuint frameBuffer)
{ {
GLERROR("---2");
BindFramebuffer(frameBuffer); BindFramebuffer(frameBuffer);
GLERROR("---3");
Enable(GL_DEPTH_TEST); Enable(GL_DEPTH_TEST);
Enable(GL_CULL_FACE); Enable(GL_CULL_FACE);
Disable(GL_BLEND); Disable(GL_BLEND);
Disable(GL_TEXTURE_2D); Disable(GL_TEXTURE_2D);
CullFace(GL_FRONT); CullFace(GL_FRONT);
ClearColor(glm::vec4(255.f, 128.f, 128.f, 128.f)); ClearColor(glm::vec4(0.f, 0.f, 0.f, 0.f));
GLERROR("---4");
} }
ShadowPassState::~ShadowPassState() ShadowPassState::~ShadowPassState()