From 805401c40961df067f9e36f85f264a3a5953e315 Mon Sep 17 00:00:00 2001 From: Jonathas Costa Date: Thu, 22 Aug 2019 11:18:21 -0400 Subject: [PATCH] Testing... --- modules/base/rendering/renderabletrail.cpp | 16 +++++----- modules/base/rendering/renderabletrail.h | 2 +- modules/base/shaders/renderabletrail_fs.glsl | 30 ++++++++++--------- modules/base/shaders/renderabletrail_vs.glsl | 20 ++++++------- .../digitaluniverse/shaders/billboard_fs.glsl | 3 +- 5 files changed, 36 insertions(+), 35 deletions(-) diff --git a/modules/base/rendering/renderabletrail.cpp b/modules/base/rendering/renderabletrail.cpp index 049736d998..14386c35d2 100644 --- a/modules/base/rendering/renderabletrail.cpp +++ b/modules/base/rendering/renderabletrail.cpp @@ -38,10 +38,10 @@ namespace { constexpr const char* ProgramName = "EphemerisProgram"; constexpr const char* KeyTranslation = "Translation"; - constexpr const std::array UniformNames = { + constexpr const std::array UniformNames = { "opacity", "modelViewTransform", "projectionTransform", "color", "useLineFade", "lineFade", "vertexSortingMethod", "idOffset", "nVertices", "stride", "pointSize", - "renderPhase", "resolution" + "renderPhase", "resolution", "lineWidth" }; // The possible values for the _renderingModes property @@ -327,14 +327,15 @@ void RenderableTrail::render(const RenderData& data, RendererTasks&) { (_appearance.renderingModes == RenderingModeLinesPoints); if (renderLines) { - glLineWidth(_appearance.lineWidth); + glLineWidth(ceil((2.f * 1.f + _appearance.lineWidth) * std::sqrt(2.f))); } if (renderPoints) { glEnable(GL_PROGRAM_POINT_SIZE); } auto render = [renderLines, renderPoints, p = _programObject, &data, - &modelTransform, pointSize = _appearance.pointSize.value(), c = _uniformCache] + &modelTransform, pointSize = _appearance.pointSize.value(), + c = _uniformCache, lw = _appearance.lineWidth] (RenderInformation& info, int nVertices, int offset) { // We pass in the model view transformation matrix as double in order to maintain @@ -357,7 +358,9 @@ void RenderableTrail::render(const RenderData& data, RendererTasks&) { glm::ivec2 resolution = global::renderEngine.renderingResolution(); p->setUniform(c.resolution, resolution); - + + p->setUniform(c.lineWidth, ceil((2.f * 1.f + lw) * std::sqrt(2.f))); + if (renderPoints) { // The stride parameter determines the distance between larger points and // smaller ones @@ -373,8 +376,6 @@ void RenderableTrail::render(const RenderData& data, RendererTasks&) { glBindVertexArray(info._vaoID); if (renderLines) { - glEnable(GL_LINE_SMOOTH); - glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); p->setUniform(c.renderPhase, RenderPhaseLines); // Subclasses of this renderer might be using the index array or might now be // so we check if there is data available and if there isn't, we use the @@ -394,7 +395,6 @@ void RenderableTrail::render(const RenderData& data, RendererTasks&) { reinterpret_cast(info.first * sizeof(unsigned int)) ); } - glDisable(GL_LINE_SMOOTH); } if (renderPoints) { // Subclasses of this renderer might be using the index array or might now be diff --git a/modules/base/rendering/renderabletrail.h b/modules/base/rendering/renderabletrail.h index 3704f186af..1507f7e4a8 100644 --- a/modules/base/rendering/renderabletrail.h +++ b/modules/base/rendering/renderabletrail.h @@ -183,7 +183,7 @@ private: UniformCache(opacity, modelView, projection, color, useLineFade, lineFade, vertexSorting, idOffset, nVertices, stride, pointSize, renderPhase, - resolution) _uniformCache; + resolution, lineWidth) _uniformCache; }; } // namespace openspace diff --git a/modules/base/shaders/renderabletrail_fs.glsl b/modules/base/shaders/renderabletrail_fs.glsl index 54d20c21e6..a89c32adb0 100644 --- a/modules/base/shaders/renderabletrail_fs.glsl +++ b/modules/base/shaders/renderabletrail_fs.glsl @@ -24,15 +24,15 @@ #include "fragment.glsl" -in vec4 vs_positionScreenSpace; +in float vs_positionDepth; in vec4 vs_gPosition; in float fade; -in float v_pointSize; -in vec2 lineCenterArray; +in vec2 mathLine; uniform vec3 color; uniform int renderPhase; uniform float opacity = 1.0; +uniform float lineWidth; // Fragile! Keep in sync with RenderableTrail::render::RenderPhase #define RenderPhaseLines 0 @@ -44,7 +44,7 @@ uniform float opacity = 1.0; Fragment getFragment() { Fragment frag; frag.color = vec4(color * fade, fade * opacity); - frag.depth = vs_positionScreenSpace.w; + frag.depth = vs_positionDepth; frag.blend = BLEND_MODE_ADDITIVE; if (renderPhase == RenderPhasePoints) { @@ -61,17 +61,19 @@ Fragment getFragment() { frag.color.a = transparencyCorrection; } - double distanceCenter = length(lineCenterArray - vec2(gl_FragCoord.xy)); - double lineWidth = 1E20;//4.0; + double distanceCenter = length(mathLine - vec2(gl_FragCoord.xy)); + double dLW = double(lineWidth); float blendFactor = 1.5; - //if (distanceCenter > lineWidth) { - // if (distanceCenter > 1E20) { - // frag.color = vec4(1.0, 0.0, 0.0, 1.0); - // //frag.color.w = 0; - // } else { - frag.color.w = pow( float((lineWidth - distanceCenter) / lineWidth), blendFactor); - //frag.color.w = 1.0; - //} + if (distanceCenter > dLW) { + frag.color = vec4(1.0, 0.0, 0.0, 1.0); + //frag.color.a = 0; + } else { + frag.color.a *= pow(float((dLW - distanceCenter) / dLW), blendFactor); + //frag.color.a = 1.0; + } + + // if (distanceCenter > 3.0) + // frag.color = vec4(0.0, 1.0, 0.0, 1.0); frag.gPosition = vs_gPosition; diff --git a/modules/base/shaders/renderabletrail_vs.glsl b/modules/base/shaders/renderabletrail_vs.glsl index b4b6e44bf4..d0b3ece155 100644 --- a/modules/base/shaders/renderabletrail_vs.glsl +++ b/modules/base/shaders/renderabletrail_vs.glsl @@ -28,11 +28,10 @@ layout(location = 0) in vec3 in_point_position; -out vec4 vs_positionScreenSpace; +out float vs_positionDepth; out vec4 vs_gPosition; out float fade; -out float v_pointSize; -out vec2 lineCenterArray; +noperspective out vec2 mathLine; uniform dmat4 modelViewTransform; uniform mat4 projectionTransform; @@ -76,12 +75,13 @@ void main() { } vs_gPosition = vec4(modelViewTransform * dvec4(in_point_position, 1)); - vs_positionScreenSpace = z_normalization(projectionTransform * vs_gPosition); + vec4 vs_positionClipSpace = projectionTransform * vs_gPosition; + vec4 vs_positionNDC = vs_positionClipSpace / vs_positionClipSpace.w; + vs_positionDepth = vs_positionClipSpace.w; + + gl_PointSize = (stride == 1 || int(modId) % stride == 0) ? + float(pointSize) : float(pointSize) / 2; + gl_Position = z_normalization(vs_positionClipSpace); - gl_PointSize = (stride == 1 || int(modId) % stride == 0) ? float(pointSize) : float(pointSize) / 2; - v_pointSize = gl_PointSize; - gl_Position = vs_positionScreenSpace; - - vec2 vp = vec2(resolution); - lineCenterArray = 0.5 * (vs_positionScreenSpace.xy + vec2(1.0)) * vp; + mathLine = 0.5 * (vs_positionNDC.xy + vec2(1.0)) * vec2(resolution); } diff --git a/modules/digitaluniverse/shaders/billboard_fs.glsl b/modules/digitaluniverse/shaders/billboard_fs.glsl index 975f76a7be..ecbc3d3a17 100644 --- a/modules/digitaluniverse/shaders/billboard_fs.glsl +++ b/modules/digitaluniverse/shaders/billboard_fs.glsl @@ -64,7 +64,6 @@ Fragment getFragment() { // with the ATM. frag.gPosition = vec4(-1e32, -1e32, -1e32, 1.0); frag.gNormal = vec4(0.0, 0.0, 0.0, 1.0); - - + return frag; } \ No newline at end of file