diff --git a/modules/globebrowsing/shaders/advanced_rings_fs.glsl b/modules/globebrowsing/shaders/advanced_rings_fs.glsl index 1ec8dc3e98..fb5d2db41b 100644 --- a/modules/globebrowsing/shaders/advanced_rings_fs.glsl +++ b/modules/globebrowsing/shaders/advanced_rings_fs.glsl @@ -31,6 +31,7 @@ in vec2 vs_st; in float vs_screenSpaceDepth; in vec4 shadowCoords; +in vec3 vs_normal; uniform sampler2DShadow shadowMapTexture; uniform sampler1D ringTextureFwrd; diff --git a/modules/globebrowsing/shaders/advanced_rings_vs.glsl b/modules/globebrowsing/shaders/advanced_rings_vs.glsl index a4a19c1270..4afd54703b 100644 --- a/modules/globebrowsing/shaders/advanced_rings_vs.glsl +++ b/modules/globebrowsing/shaders/advanced_rings_vs.glsl @@ -28,10 +28,12 @@ layout(location = 0) in vec2 in_position; layout(location = 1) in vec2 in_st; +layout(location = 2) in vec3 in_normal; out vec2 vs_st; out float vs_screenSpaceDepth; out vec4 shadowCoords; +out vec3 vs_normal; uniform dmat4 modelViewProjectionMatrix; @@ -43,6 +45,7 @@ uniform dmat4 shadowMatrix; void main() { vs_st = in_st; + vs_normal = mat3(modelViewProjectionMatrix) * in_normal; dvec4 positionClipSpace = modelViewProjectionMatrix * dvec4(in_position, 0.0, 1.0); vec4 positionClipSpaceZNorm = z_normalization(vec4(positionClipSpace)); diff --git a/modules/globebrowsing/shaders/rings_fs.glsl b/modules/globebrowsing/shaders/rings_fs.glsl index 3fc0cbc3b2..7967203a7e 100644 --- a/modules/globebrowsing/shaders/rings_fs.glsl +++ b/modules/globebrowsing/shaders/rings_fs.glsl @@ -31,6 +31,7 @@ in vec2 vs_st; in float vs_screenSpaceDepth; in vec4 shadowCoords; +in vec3 vs_normal; uniform sampler2DShadow shadowMapTexture; uniform sampler1D ringTexture; diff --git a/modules/globebrowsing/shaders/rings_vs.glsl b/modules/globebrowsing/shaders/rings_vs.glsl index a4a19c1270..4afd54703b 100644 --- a/modules/globebrowsing/shaders/rings_vs.glsl +++ b/modules/globebrowsing/shaders/rings_vs.glsl @@ -28,10 +28,12 @@ layout(location = 0) in vec2 in_position; layout(location = 1) in vec2 in_st; +layout(location = 2) in vec3 in_normal; out vec2 vs_st; out float vs_screenSpaceDepth; out vec4 shadowCoords; +out vec3 vs_normal; uniform dmat4 modelViewProjectionMatrix; @@ -43,6 +45,7 @@ uniform dmat4 shadowMatrix; void main() { vs_st = in_st; + vs_normal = mat3(modelViewProjectionMatrix) * in_normal; dvec4 positionClipSpace = modelViewProjectionMatrix * dvec4(in_position, 0.0, 1.0); vec4 positionClipSpaceZNorm = z_normalization(vec4(positionClipSpace)); diff --git a/modules/globebrowsing/src/ringscomponent.cpp b/modules/globebrowsing/src/ringscomponent.cpp index 6380819d94..d98b4c7492 100644 --- a/modules/globebrowsing/src/ringscomponent.cpp +++ b/modules/globebrowsing/src/ringscomponent.cpp @@ -769,15 +769,18 @@ void RingsComponent::createPlane() { GLfloat y; GLfloat s; GLfloat t; + GLfloat nx; + GLfloat ny; + GLfloat nz; }; const std::array vertices = { - VertexData{ -size, -size, 0.f, 0.f }, - VertexData{ size, size, 1.f, 1.f }, - VertexData{ -size, size, 0.f, 1.f }, - VertexData{ -size, -size, 0.f, 0.f }, - VertexData{ size, -size, 1.f, 0.f }, - VertexData{ size, size, 1.f, 1.f }, + VertexData{ -size, -size, 0.f, 0.f, 0.f, 0.f, 1.f }, + VertexData{ size, size, 1.f, 1.f, 0.f, 0.f, 1.f }, + VertexData{ -size, size, 0.f, 1.f, 0.f, 0.f, 1.f }, + VertexData{ -size, -size, 0.f, 0.f, 0.f, 0.f, 1.f }, + VertexData{ size, -size, 1.f, 0.f, 0.f, 0.f, 1.f }, + VertexData{ size, size, 1.f, 1.f, 0.f, 0.f, 1.f }, }; glBindVertexArray(_quad); @@ -801,6 +804,15 @@ void RingsComponent::createPlane() { sizeof(VertexData), reinterpret_cast(offsetof(VertexData, s)) ); + glEnableVertexAttribArray(2); + glVertexAttribPointer( + 2, + 3, + GL_FLOAT, + GL_FALSE, + sizeof(VertexData), + reinterpret_cast(offsetof(VertexData, nx)) + ); } void RingsComponent::compileShadowShader() {