From 194400e1af31e0baba5c7cbc5809e91b0e06d30b Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Fri, 29 Nov 2019 16:20:21 +0100 Subject: [PATCH] inversed view transform uniform --- gl/glsl_common.cpp | 1 + gl/ubo.h | 3 ++- opengl33renderer.cpp | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/gl/glsl_common.cpp b/gl/glsl_common.cpp index 299b3a12..14d2697a 100644 --- a/gl/glsl_common.cpp +++ b/gl/glsl_common.cpp @@ -65,6 +65,7 @@ void gl::glsl_common_setup() { mat4 projection; mat4 lightview; + mat4 inv_view; vec3 scene_extra; float time; }; diff --git a/gl/ubo.h b/gl/ubo.h index cd29cfb3..473c4d28 100644 --- a/gl/ubo.h +++ b/gl/ubo.h @@ -37,11 +37,12 @@ namespace gl { glm::mat4 projection; glm::mat4 lightview; + glm::mat4 inv_view; glm::vec3 scene_extra; float time; }; - static_assert(sizeof(scene_ubs) == 144, "bad size of ubs"); + static_assert(sizeof(scene_ubs) == 208, "bad size of ubs"); const size_t MAX_PARAMS = 3; diff --git a/opengl33renderer.cpp b/opengl33renderer.cpp index c7e659eb..08c39c68 100644 --- a/opengl33renderer.cpp +++ b/opengl33renderer.cpp @@ -555,7 +555,8 @@ void opengl33_renderer::Render_pass(viewport_config &vp, rendermode const Mode) scene_ubs.time = Timer::GetTime(); scene_ubs.projection = OpenGLMatrices.data(GL_PROJECTION); - scene_ubo->update(scene_ubs); + scene_ubs.inv_view = glm::inverse( glm::mat4{ glm::mat3{ m_renderpass.pass_camera.modelview() } } ); + scene_ubo->update(scene_ubs); scene_ubo->bind_uniform(); m_colorpass = m_renderpass; @@ -1309,7 +1310,6 @@ void opengl33_renderer::setup_matrices() { OpenGLMatrices.mode(GL_PROJECTION); OpenGLMatrices.load_matrix(m_renderpass.pass_camera.projection()); - // trim modelview matrix just to rotation, since rendering is done in camera-centric world space OpenGLMatrices.mode(GL_MODELVIEW); OpenGLMatrices.load_matrix(glm::mat4(glm::mat3(m_renderpass.pass_camera.modelview())));