Try some stuff

This commit is contained in:
FakeShemp
2016-02-18 23:33:10 +01:00
parent f2ab02d860
commit 73a4336206
2 changed files with 9 additions and 13 deletions
+8 -12
View File
@@ -19,8 +19,10 @@ std::array<glm::vec3, 8> ShadowPass::UpdateFrustumPoints(Camera* cam, glm::vec3
glm::vec3 up = glm::vec3(0.f, 1.f, 0.f);
glm::vec3 right = glm::normalize(glm::cross(view_dir, up));
glm::vec3 farCenter = center + view_dir * cam->FarClip();
glm::vec3 nearCenter = center + view_dir * cam->NearClip();
//glm::vec3 farCenter = center + view_dir * cam->FarClip();
//glm::vec3 nearCenter = center + view_dir * cam->NearClip();
glm::vec3 farCenter = view_dir * cam->FarClip();
glm::vec3 nearCenter = view_dir * cam->NearClip();
up = glm::normalize(glm::cross(right, view_dir));
@@ -101,12 +103,11 @@ glm::mat4 ShadowPass::FindNewFrustum(ShadowCamera shadow_cam)
return p;
}
glm::mat4 ShadowPass::CalculateFrustum(RenderScene & scene, std::shared_ptr<DirectionalLightJob> directionalLightJob, glm::mat4& p, glm::mat4& v, ShadowCamera shad_cam)
glm::mat4 ShadowPass::CalculateFrustum(RenderScene & scene, std::shared_ptr<DirectionalLightJob> directionalLightJob, ShadowCamera shad_cam)
{
p = glm::ortho(m_LRBT[Left], m_LRBT[Right], m_LRBT[Bottom], m_LRBT[Top], m_NearFarPlane[Near], m_NearFarPlane[Far]);
v = glm::lookAt(glm::vec3(0.f) + shad_cam.camera->Position(), glm::vec3(directionalLightJob->Direction) + shad_cam.camera->Position(), glm::vec3(-1.f, 0.f, 0.f));
glm::vec3 middle = shad_cam.camera->Position() + (shad_cam.camera->Forward() * shad_cam.camera->FarClip() * 0.5f);
return p * v;
return glm::lookAt(glm::vec3(0.f) + middle, glm::vec3(directionalLightJob->Direction) + middle, glm::vec3(-1.f, 0.f, 0.f));
}
void ShadowPass::InitializeFrameBuffers()
@@ -180,15 +181,13 @@ void ShadowPass::Draw(RenderScene & scene)
glCullFace(GL_FRONT);
//state->Disable(GL_CULL_FACE);
//m_LightProjection = FindNewFrustum(m_shadCams[0], m_LightProjection, m_LightProjection);
if (m_ShadowOn == true)
{
for (auto &job : scene.DirectionalLightJobs) {
auto directionalLightJob = std::dynamic_pointer_cast<DirectionalLightJob>(job);
if (directionalLightJob) {
CalculateFrustum(scene, directionalLightJob, m_LightProjection[i], m_LightView[i], m_shadCams[i]);
m_LightView[i] = CalculateFrustum(scene, directionalLightJob, m_shadCams[i]);
m_LightProjection[i] = FindNewFrustum(m_shadCams[i]);
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(m_LightProjection[i]));
@@ -201,9 +200,6 @@ void ShadowPass::Draw(RenderScene & scene)
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
//glm::mat4 proj_mat = ApplyCropMatrix(m_shadCams[0], modelJob->Matrix, m_LightView);
//glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(proj_mat));
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)));