diff --git a/modules/base/lightsource/scenegraphlightsource.cpp b/modules/base/lightsource/scenegraphlightsource.cpp index 50f6695d5b..ef59e739e7 100644 --- a/modules/base/lightsource/scenegraphlightsource.cpp +++ b/modules/base/lightsource/scenegraphlightsource.cpp @@ -137,11 +137,10 @@ glm::vec3 SceneGraphLightSource::directionViewSpace(const RenderData& renderData const glm::dvec3 renderNodePosition = renderData.modelTransform.translation; - const glm::dvec3 lightDirectionViewSpace = renderData.camera.viewRotationMatrix() * - glm::dvec4((lightPosition - renderNodePosition), 1.0); + const glm::dvec3 viewSpace = glm::dvec3(renderData.camera.combinedViewMatrix() * + glm::dvec4((lightPosition - renderNodePosition), 1.0)); - return glm::normalize(lightDirectionViewSpace); + return glm::normalize(viewSpace); } - } // namespace openspace diff --git a/modules/base/rendering/renderablemodel.cpp b/modules/base/rendering/renderablemodel.cpp index 0aa9bb2273..ab58a5a148 100644 --- a/modules/base/rendering/renderablemodel.cpp +++ b/modules/base/rendering/renderablemodel.cpp @@ -48,7 +48,7 @@ namespace { constexpr const std::array UniformNames = { "opacity", "nLightSources", "lightDirectionsViewSpace", "lightIntensities", - "modelViewTransform", "crippedModelViewTransform", "projectionTransform", + "modelViewTransform", "normalTransform", "projectionTransform", "performShading", "texture1", "ambientIntensity", "diffuseIntensity", "specularIntensity" }; @@ -369,13 +369,11 @@ void RenderableModel::render(const RenderData& data, RendererTasks&) { glm::mat4(modelViewTransform) ); - glm::dmat4 crippedModelViewTransform = glm::transpose(glm::inverse( - glm::dmat4(glm::inverse(data.camera.sgctInternal.viewMatrix())) * modelViewTransform - )); + glm::dmat4 normalTransform = glm::transpose(glm::inverse(modelViewTransform)); _program->setUniform( - _uniformCache.crippedModelViewTransform, - glm::mat4(crippedModelViewTransform) + _uniformCache.normalTransform, + glm::mat4(normalTransform) ); _program->setUniform( diff --git a/modules/base/rendering/renderablemodel.h b/modules/base/rendering/renderablemodel.h index 721de33f44..ff382e5ecc 100644 --- a/modules/base/rendering/renderablemodel.h +++ b/modules/base/rendering/renderablemodel.h @@ -81,7 +81,7 @@ private: ghoul::opengl::ProgramObject* _program = nullptr; UniformCache(opacity, nLightSources, lightDirectionsViewSpace, lightIntensities, - modelViewTransform, crippedModelViewTransform, projectionTransform, + modelViewTransform, normalTransform, projectionTransform, performShading, texture, ambientIntensity, diffuseIntensity, specularIntensity) _uniformCache; diff --git a/modules/base/shaders/model_fs.glsl b/modules/base/shaders/model_fs.glsl index 628c87b2d4..8ea1340660 100644 --- a/modules/base/shaders/model_fs.glsl +++ b/modules/base/shaders/model_fs.glsl @@ -92,4 +92,4 @@ Fragment getFragment() { return frag; -} +} \ No newline at end of file diff --git a/modules/base/shaders/model_vs.glsl b/modules/base/shaders/model_vs.glsl index 8b55a1a7ba..51350b218d 100644 --- a/modules/base/shaders/model_vs.glsl +++ b/modules/base/shaders/model_vs.glsl @@ -37,7 +37,7 @@ out vec4 vs_positionCameraSpace; uniform mat4 modelViewTransform; uniform mat4 projectionTransform; -uniform mat4 crippedModelViewTransform; +uniform mat4 normalTransform; void main() { vs_positionCameraSpace = modelViewTransform * in_position; @@ -48,6 +48,5 @@ void main() { vs_st = in_st; vs_screenSpaceDepth = positionScreenSpace.w; - //vs_normalViewSpace = normalize(transpose(inverse(mat3(crippedModelViewTransform))) * in_normal); - vs_normalViewSpace = normalize(mat3(crippedModelViewTransform) * in_normal); + vs_normalViewSpace = normalize(mat3(normalTransform) * in_normal); }