Try some stuff
This commit is contained in:
@@ -36,7 +36,7 @@ public:
|
|||||||
glm::mat4 lightV() const { return m_LightView[m_ShadowLevel]; }
|
glm::mat4 lightV() const { return m_LightView[m_ShadowLevel]; }
|
||||||
private:
|
private:
|
||||||
|
|
||||||
glm::mat4 CalculateFrustum(RenderScene & scene, std::shared_ptr<DirectionalLightJob> directionalLightJob, glm::mat4& p, glm::mat4& v, ShadowCamera shad_cam);
|
glm::mat4 CalculateFrustum(RenderScene & scene, std::shared_ptr<DirectionalLightJob> directionalLightJob, ShadowCamera shad_cam);
|
||||||
std::array<glm::vec3, 8> UpdateFrustumPoints(Camera* cam, glm::vec3 center, glm::vec3 view_dir);
|
std::array<glm::vec3, 8> UpdateFrustumPoints(Camera* cam, glm::vec3 center, glm::vec3 view_dir);
|
||||||
void UpdateSplitDist(std::array<ShadowCamera, MAX_SPLITS> shadow_cams, float far_distance, float near_distance);
|
void UpdateSplitDist(std::array<ShadowCamera, MAX_SPLITS> shadow_cams, float far_distance, float near_distance);
|
||||||
glm::mat4 FindNewFrustum(ShadowCamera shadow_cam);
|
glm::mat4 FindNewFrustum(ShadowCamera shadow_cam);
|
||||||
|
|||||||
@@ -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 up = glm::vec3(0.f, 1.f, 0.f);
|
||||||
glm::vec3 right = glm::normalize(glm::cross(view_dir, up));
|
glm::vec3 right = glm::normalize(glm::cross(view_dir, up));
|
||||||
|
|
||||||
glm::vec3 farCenter = center + view_dir * cam->FarClip();
|
//glm::vec3 farCenter = center + view_dir * cam->FarClip();
|
||||||
glm::vec3 nearCenter = center + view_dir * cam->NearClip();
|
//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));
|
up = glm::normalize(glm::cross(right, view_dir));
|
||||||
|
|
||||||
@@ -101,12 +103,11 @@ glm::mat4 ShadowPass::FindNewFrustum(ShadowCamera shadow_cam)
|
|||||||
return p;
|
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]);
|
glm::vec3 middle = shad_cam.camera->Position() + (shad_cam.camera->Forward() * shad_cam.camera->FarClip() * 0.5f);
|
||||||
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));
|
|
||||||
|
|
||||||
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()
|
void ShadowPass::InitializeFrameBuffers()
|
||||||
@@ -180,15 +181,13 @@ void ShadowPass::Draw(RenderScene & scene)
|
|||||||
glCullFace(GL_FRONT);
|
glCullFace(GL_FRONT);
|
||||||
//state->Disable(GL_CULL_FACE);
|
//state->Disable(GL_CULL_FACE);
|
||||||
|
|
||||||
//m_LightProjection = FindNewFrustum(m_shadCams[0], m_LightProjection, m_LightProjection);
|
|
||||||
|
|
||||||
if (m_ShadowOn == true)
|
if (m_ShadowOn == true)
|
||||||
{
|
{
|
||||||
for (auto &job : scene.DirectionalLightJobs) {
|
for (auto &job : scene.DirectionalLightJobs) {
|
||||||
auto directionalLightJob = std::dynamic_pointer_cast<DirectionalLightJob>(job);
|
auto directionalLightJob = std::dynamic_pointer_cast<DirectionalLightJob>(job);
|
||||||
|
|
||||||
if (directionalLightJob) {
|
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]);
|
m_LightProjection[i] = FindNewFrustum(m_shadCams[i]);
|
||||||
|
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(m_LightProjection[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));
|
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);
|
glBindVertexArray(modelJob->Model->VAO);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer);
|
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)));
|
glDrawElements(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(modelJob->StartIndex * sizeof(unsigned int)));
|
||||||
|
|||||||
Reference in New Issue
Block a user