diff --git a/data/assets/bastille-mas-model.scene b/data/assets/bastille-mas-model.scene index daa23ac5f1..1901a6f767 100644 --- a/data/assets/bastille-mas-model.scene +++ b/data/assets/bastille-mas-model.scene @@ -69,13 +69,13 @@ local Keybindings = { "openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.NodeGroup.skippingNodesByFlux', 0.000000);" .. "openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.NodeGroup.skippingNodesByRadius', 0.000000);" .. "openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.Streams.thresholdFlux', 0.000000);" .. - "openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.Streams.filteringlower', 0.000000);" .. + "openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.Streams.filterLower', 0.000000);" .. "openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.Earthfocus.distancePlanetThreshold', 0.000000);".. "openspace.setPropertyValueSingle('NavigationHandler.OrbitalNavigator.Aim', '');".. "openspace.setPropertyValueSingle('NavigationHandler.OrbitalNavigator.Anchor', 'Sun');".. "openspace.setPropertyValueSingle('NavigationHandler.OrbitalNavigator.RetargetAnchor', nil);".. "openspace.navigation.loadNavigationState('Sun');".. - "openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.Streams.filteringupper', 5.000000);", + "openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.Streams.filterUpper', 5.000000);", --"Todo, fix the last one which is on the z axis" --"openspace.setPropertyValueSingle('Scene.MAS_MHD_StreamNodes.Renderable.Streams.limitsZLower', {--358139527168.969971,953488375808.000000});", Documentation = "Resets the visualisation of streamnodes", diff --git a/modules/fieldlinessequence/rendering/renderablestreamnodes.cpp b/modules/fieldlinessequence/rendering/renderablestreamnodes.cpp index 1977c3b494..b5921dcd7c 100644 --- a/modules/fieldlinessequence/rendering/renderablestreamnodes.cpp +++ b/modules/fieldlinessequence/rendering/renderablestreamnodes.cpp @@ -138,12 +138,12 @@ namespace { "This value specifies the threshold that will be changed with the flux value." }; constexpr openspace::properties::Property::PropertyInfo FilteringInfo = { - "filteringLower", + "filterLower", "Filtering Lower Value in AU", "Use filtering to show nodes within a given range." }; constexpr openspace::properties::Property::PropertyInfo FilteringUpperInfo = { - "filteringUpper", + "filterUpper", "Filtering Upper Value in AU", "Use filtering to show nodes within a given range." }; @@ -223,9 +223,9 @@ namespace { "The misalignement number for sequence for streamnodes vs Fieldlines" }; constexpr openspace::properties::Property::PropertyInfo FlowColorInfo = { - "color", - "Color", - "Color of particles." + "flowcolor", + "Color of Flow", + "Color of Flow." }; constexpr openspace::properties::Property::PropertyInfo FlowEnabledInfo = { "flowEnabled", @@ -248,7 +248,7 @@ namespace { "Speed", "Speed of the flow." }; - constexpr openspace::properties::Property::PropertyInfo FlowColoringInfo = { + constexpr openspace::properties::Property::PropertyInfo UseFlowColorInfo = { "coloring", "Color either by Flowcolor or Flow colortable", "If set to true the flow will be colored by Flowcolor." @@ -372,7 +372,7 @@ RenderableStreamNodes::RenderableStreamNodes(const ghoul::Dictionary& dictionary , _pDomainZ(DomainZInfo) , _pFluxColorAlpha(FluxColorAlphaInfo, 1.f, 0.f, 1.f) , _pThresholdFlux(ThresholdFluxInfo, 0.f, -50.f, 10.f) - , _pFiltering(FilteringInfo, 0.f, 0.f, 5.f) + , _pFilteringLower(FilteringInfo, 0.f, 0.f, 5.f) , _pFilteringUpper(FilteringUpperInfo, 5.f, 0.f, 5.f) , _pAmountofNodes(AmountofNodesInfo, 1, 1, 100) , _pDefaultNodeSkip(DefaultNodeSkipInfo, 1, 1, 100) @@ -393,7 +393,7 @@ RenderableStreamNodes::RenderableStreamNodes(const ghoul::Dictionary& dictionary , _pFlowParticleSize(FlowParticleSizeInfo, 5, 0, 500) , _pFlowParticleSpacing(FlowParticleSpacingInfo, 60, 0, 500) , _pFlowSpeed(FlowSpeedInfo, 20, 0, 1000) - , _pFlowColoring(FlowColoringInfo, false) + , _pUseFlowColor(UseFlowColorInfo, false) , _scaleFactor(TempInfo1, 150.f, 1.f, 500.f) //, _pMinNodeDistanceSize(MinNodeDistanceSizeInfo, 1.f, 1.f, 7.f) , _pMaxNodeDistanceSize(MaxNodeDistanceSizeInfo, 1.f, 1.f, 10.f) @@ -1096,7 +1096,7 @@ void RenderableStreamNodes::setupProperties() { _pColorGroup.addProperty(_pFluxColorAlpha); _pStreamGroup.addProperty(_pThresholdFlux); - _pStreamGroup.addProperty(_pFiltering); + _pStreamGroup.addProperty(_pFilteringLower); _pStreamGroup.addProperty(_pFilteringUpper); _pStreamGroup.addProperty(_pDomainZ); @@ -1121,7 +1121,7 @@ void RenderableStreamNodes::setupProperties() { _pFlowGroup.addProperty(_pFlowParticleSize); _pFlowGroup.addProperty(_pFlowParticleSpacing); _pFlowGroup.addProperty(_pFlowSpeed); - _pFlowGroup.addProperty(_pFlowColoring); + _pFlowGroup.addProperty(_pUseFlowColor); // --------------------- Add Options to OptionProperties --------------------- // _pGoesEnergyBins.addOption(static_cast(GoesEnergyBins::Emin01), "Emin01"); @@ -1258,8 +1258,8 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { const glm::dmat4 modelViewMat = data.camera.combinedViewMatrix() * modelMat; //not in use atm. - // _shaderProgram->setUniform("modelViewProjection", - // data.camera.sgctInternal.projectionMatrix() * glm::mat4(modelViewMat)); + _shaderProgram->setUniform("modelViewProjection", + data.camera.sgctInternal.projectionMatrix() * glm::mat4(modelViewMat)); //glm::vec3 earthPos = glm::vec3(94499869340, -115427843118, 11212075887.3); @@ -1278,7 +1278,7 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { _shaderProgram->setUniform(_uniformCache.nodeSizeLargerFlux, _pNodeSizeLargerFlux); _shaderProgram->setUniform(_uniformCache.thresholdFlux, _pThresholdFlux); _shaderProgram->setUniform("colorMode", _pColorMode); - _shaderProgram->setUniform("filterRadius", _pFiltering); + _shaderProgram->setUniform("filterLower", _pFilteringLower); _shaderProgram->setUniform("filterUpper", _pFilteringUpper); _shaderProgram->setUniform("scalingMode", _pScalingmethod); _shaderProgram->setUniform("colorTableRange", _pColorTableRange.value()); @@ -1303,7 +1303,7 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { "time", global::windowDelegate.applicationTime() * -1 ); - _shaderProgram->setUniform("flowColoring", _pFlowColoring); + _shaderProgram->setUniform("flowColoring", _pUseFlowColor); //_shaderProgram->setUniform("minNodeDistanceSize", _pMinNodeDistanceSize); _shaderProgram->setUniform("maxNodeDistanceSize", _pMaxNodeDistanceSize); //_shaderProgram->setUniform("nodeDistanceThreshold", _pNodeDistanceThreshold); @@ -1314,6 +1314,7 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { _shaderProgram->setUniform("usingRadiusPerspective", _pRadiusPerspective); //////// test for camera perspective: + /* glm::dmat4 modelMatrix = glm::translate(glm::dmat4(1.0), data.modelTransform.translation) * // Translation glm::dmat4(data.modelTransform.rotation) * // Spice rotation @@ -1338,12 +1339,14 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { orthoRight = glm::normalize(glm::cross(otherVector, cameraViewDirectionWorld)); } glm::dvec3 orthoUp = glm::normalize(glm::cross(cameraViewDirectionWorld, orthoRight)); + */ glm::vec3 cameraPos = data.camera.positionVec3(); //this gives the same referenceframe as the nodes and makes it possible to see the //the distance between the camera and the nodes. cameraPos = cameraPos * data.modelTransform.rotation; + _shaderProgram->setUniform("cameraPos", cameraPos); //glm::vec3 cameraPos = data.camera.unsynchedPositionVec3(); //LDEBUG("camerapos x: " + std::to_string(cameraPos.x)); //LDEBUG("camerapos y: " + std::to_string(cameraPos.z)); @@ -1356,9 +1359,9 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { // cameraPos.x = cameraPostemp.x; // cameraPos.y = cameraPostemp.y; // cameraPos.z = cameraPostemp.z; - _shaderProgram->setUniform("cameraPos", cameraPos); - _shaderProgram->setUniform("scaleFactor", _scaleFactor); - _shaderProgram->setUniform( + // _shaderProgram->setUniform("scaleFactor", _scaleFactor); + /* _shaderProgram->setUniform( + "up", glm::vec3(data.camera.lookUpVectorWorldSpace()) ); @@ -1369,6 +1372,7 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { glm::dmat4(data.camera.projectionMatrix()) * data.camera.combinedViewMatrix() ) ); + //_shaderProgram->setUniform("minPointSize", 3.f); // in pixels //_shaderProgram->setUniform("maxPointSize", 30.f); // in pixels _shaderProgram->setUniform("up", glm::vec3(orthoUp)); @@ -1380,6 +1384,7 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { ); GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); + */ // _shaderProgram->setUniform("screenSize", glm::vec2(viewport[2], viewport[3])); //_shaderProgram->setUniform("camerapos", data.camera.) @@ -1406,63 +1411,7 @@ void RenderableStreamNodes::render(const RenderData& data, RendererTasks&) { const std::vector& vertPos = _vertexPositions; glBindVertexArray(_vertexArrayObject); - /* - glBegin(GL_LINE_LOOP); //start drawing a line loop - glVertex3f(-1.0f, 0.0f, 0.0f); //left of window - glVertex3f(0.0f, -1.0f, 0.0f); //bottom of window - glVertex3f(1.0f, 0.0f, 0.0f); //right of window - glVertex3f(0.0f, 1.0f, 0.0f); //top of window - glEnd(); //end drawing of line loop - */ - - /*glColor3f(1, 0, 0); - glBegin(GL_TRIANGLES); - glVertex3f(-0.60, 0.77, 0); // <--- -0.60 instead of -0.68 - glVertex3f(-0.68, 0.77, 0); // <--- -0.68 instead of -0.60 - glVertex3f(-0.7, 0.68, 0); - glVertex3f(-0.64, 0.63, 0); - glVertex3f(-0.58, 0.68, 0); - glEnd();*/ - - /*glTranslatef(0.0f, 0.0f, -4.0f);//move forward 4 units - - glColor3f(0.0f, 0.0f, 1.0f); //blue color - - glBegin(GL_POLYGON);//begin drawing of polygon - glVertex3f(-0.5f, 0.5f, 0.0f);//first vertex - glVertex3f(0.5f, 0.5f, 0.0f);//second vertex - glVertex3f(1.0f, 0.0f, 0.0f);//third vertex - glVertex3f(0.5f, -0.5f, 0.0f);//fourth vertex - glVertex3f(-0.5f, -0.5f, 0.0f);//fifth vertex - glVertex3f(-1.0f, 0.0f, 0.0f);//sixth vertex - glEnd();//end drawing of polygon*/ - - /*static float arrowCoordinates[] = { - -0.3f, 0.2f, 0.0f, // left swing - 0.0f, 0.5f, 0.0f, // top - 0.0f, -0.5f, 0.0f, // bottom - 0.0f, 0.5f, 0.0f, // back to top again - 0.3f, 0.2f, 0.0f // right swing - }; - */ - - /*int COORDS_PER_VERTEX = 3; - int vertexCount = 364 * 3 / COORDS_PER_VERTEX; - int vertexStride = COORDS_PER_VERTEX * 4; // 4 bytes per vertex - glEnableVertexAttribArray(Arrow); - //glVertexAttribPointer(Arrow, 3, GL_FLOAT, GL_FALSE, 0, 0); - //glVertexAttribPointer(Arrow, COORDS_PER_VERTEX, GL_FLOAT, GL_FALSE, vertexStride, vertexBuffer); - glVertexAttribPointer(Arrow, COORDS_PER_VERTEX, GL_FLOAT, GL_FALSE, vertexStride, 0); - glDrawArrays(GL_LINE_STRIP, 0, vertexCount);*/ - - //glBindBuffer(GL_ARRAY_BUFFER, _vertexPositionBuffer); - - /*glMultiDrawArrays( - GL_LINE_STRIP, //_drawingOutputType, - _lineStart.data(), - _lineCount.data(), - static_cast(_lineStart.size()) - );*/ + _shaderProgram->setUniform("firstRender", true); GLint temp = 0; diff --git a/modules/fieldlinessequence/rendering/renderablestreamnodes.h b/modules/fieldlinessequence/rendering/renderablestreamnodes.h index 568332609f..d14359011b 100644 --- a/modules/fieldlinessequence/rendering/renderablestreamnodes.h +++ b/modules/fieldlinessequence/rendering/renderablestreamnodes.h @@ -236,7 +236,7 @@ private: // Threshold flux value properties::FloatProperty _pThresholdFlux; // Filtering nodes within a range - properties::FloatProperty _pFiltering; + properties::FloatProperty _pFilteringLower; // Filtering nodes with a upper range properties::FloatProperty _pFilteringUpper; // Amount of nodes to show @@ -273,7 +273,7 @@ private: // Speed of simulated flow properties::IntProperty _pFlowSpeed; //Either use flowcolortable or FlowColor. - properties::BoolProperty _pFlowColoring; + properties::BoolProperty _pUseFlowColor; properties::PropertyOwner _pCameraPerspectiveGroup; properties::BoolProperty _pCameraPerspective; diff --git a/modules/fieldlinessequence/shaders/streamnodes_vs.glsl b/modules/fieldlinessequence/shaders/streamnodes_vs.glsl index 19b57efb85..2aabb7de06 100644 --- a/modules/fieldlinessequence/shaders/streamnodes_vs.glsl +++ b/modules/fieldlinessequence/shaders/streamnodes_vs.glsl @@ -27,7 +27,7 @@ // General Uniforms that's always needed uniform vec4 lineColor; //old not in use atm -//uniform mat4 modelViewProjection; +uniform mat4 modelViewProjection; // Uniforms needed to color by quantity uniform int colorMode; @@ -60,7 +60,7 @@ uniform float nodeSize; uniform float nodeSizeLargerFlux; uniform vec4 streamColor; uniform float thresholdFlux; -uniform float filterRadius; +uniform float filterLower; uniform float filterUpper; uniform int scalingMode; uniform int nodeSkipMethod; @@ -77,23 +77,24 @@ uniform bool firstRender; uniform int enhanceMethod; uniform double time; + //uniform float interestingStreams[4]; // Speicific uniforms for cameraperspective -uniform float scaleFactor; +//uniform float scaleFactor; //uniform float minNodeDistanceSize; uniform float maxNodeDistanceSize; uniform float nodeDistanceThreshold; -uniform mat4 cameraViewProjectionMatrix; -uniform dmat4 modelMatrix; +//uniform mat4 cameraViewProjectionMatrix; +//uniform dmat4 modelMatrix; -uniform float correctionSizeFactor; -uniform float correctionSizeEndDistance; -uniform vec3 cameraPos; -uniform vec3 up; -uniform vec3 right; +uniform float correctionSizeFactor; +//uniform float correctionSizeEndDistance; +//uniform vec3 up; +//uniform vec3 right; uniform vec3 cameraLookUp; // in world space (no SGCT View was considered) +uniform vec3 cameraPos; //uniform vec2 screenSize; uniform bool usingCameraPerspective; uniform bool usingRadiusPerspective; @@ -351,7 +352,7 @@ void main() { if(CheckvertexIndex()){ //Filtering by radius and z-axis - if(rValue > filterRadius && rValue < filterUpper){ //if(rValue > filterRadius){ + if(rValue > filterLower && rValue < filterUpper){ //if(rValue > filterLower){ if(in_position.z > domainLimZ.x && in_position.z < domainLimZ.y){ //Uniform coloring if(colorMode == 0){ @@ -384,7 +385,53 @@ void main() { vs_color = vec4(0); } - /* + if(usingCameraPerspective){ + float rtemp = 1.0; + if(rValue > 1.0){ + rtemp = 1.0; + } + else{ + rtemp = rValue; + } + + float maxdist = 600000000000.f; + float distancevec = distance(cameraPos, in_position.xyz); + + if(distancevec < maxdist){ + float distScale = 1 - smoothstep(0, maxdist, distancevec); + //float distMinScale = 1 - smoothstep(0, nodeDistanceThreshold, distancevec); + float factorS = 1.f; + if(usingRadiusPerspective){ + factorS = pow(distScale, 9) * 100.f * pow(rtemp, 2); + } + else{ + factorS = pow(distScale, 9) * 100.f; + } + gl_PointSize = factorS * maxNodeDistanceSize * 0.8; + } + // else{ + // gl_PointSize = nodeSize; + // } + + if(gl_PointSize > 40){ + gl_PointSize = 40; + } + if(gl_PointSize < 1.f){ + gl_PointSize = 1.f; + } + } + + vec4 position_in_meters = vec4(in_position, 1); + vec4 positionClipSpace = modelViewProjection * position_in_meters; + //vs_gPosition = vec4(modelViewTransform * dvec4(in_point_position, 1)); + + gl_Position = vec4(positionClipSpace.xy, 0, positionClipSpace.w); + vs_depth = gl_Position.w; + +} + +//------------ OLD CODE, MAYBE USEFUL FOR CAMERAPERSPECTIVE + /* if(distance(in_position, cameraPos) < 100000000000.f){ gl_PointSize = nodeSize * 5; } @@ -393,6 +440,7 @@ void main() { } */ //test for camera perspective:: + /* dvec4 dpos = dvec4(in_position, 1.0); dpos = modelMatrix * dpos; @@ -409,7 +457,7 @@ void main() { float expVar = float(-distCamera) / pow(10.f, correctionSizeEndDistance); float factorVar = pow(10.f, correctionSizeFactor); scaleMultiply *= 1.f / (1.f + factorVar * exp(expVar)); - + */ //vec2 halfViewSize = vec2(screenSize.x, screenSize.y) * 0.5f; // vec2 topRight = crossCorner.xy/crossCorner.w; // vec2 bottomLeft = initialPosition.xy/initialPosition.w; @@ -430,7 +478,7 @@ void main() { gl_PointSize = ta; } */ - + /* vec3 scaledRight = scaleMultiply * right * 0.5f; vec3 scaledUp = scaleMultiply * up * 0.5f; @@ -441,80 +489,4 @@ void main() { vec4 initialPosition = z_normalization(dposClip - scaledRightClip - scaledUpClip); gl_Position = initialPosition; vs_depth = initialPosition.w; - - if(usingCameraPerspective){ - float rtemp = 1.0; - if(rValue > 1.0){ - rtemp = 1.0; - } - else{ - rtemp = rValue; - } - - float maxdist = 600000000000.f; - float distancevec = distance(cameraPos, in_position.xyz); - float distScale = 1 - smoothstep(0, maxdist, distancevec); - float factorS = pow(distScale, 9) * rValue * 15.f; - - //distancevec = distance(newpos, in_position.xyz); - - if(distancevec < maxdist){ - float distScale = 1 - smoothstep(0, maxdist, distancevec); - //float distMinScale = 1 - smoothstep(0, nodeDistanceThreshold, distancevec); - float factorS = 1.f; - if(usingRadiusPerspective){ - factorS = pow(distScale, 9) * 100.f * pow(rtemp, 2); - } - else{ - factorS = pow(distScale, 9) * 100.f; - } - gl_PointSize = factorS * maxNodeDistanceSize * 0.8; - } - else{ - gl_PointSize = nodeSize; - } - - if(gl_PointSize > 40){ - gl_PointSize = 40; - } - if(gl_PointSize < nodeSize){ - gl_PointSize = nodeSize; - } - } - /* - - float factorS = pow(distScale, 5) * 80.f; //* pow(rValue, 2); - if(gl_PointSize * factorS > 30){ - gl_PointSize = 30; - } - else{ - gl_PointSize = gl_PointSize * factorS; - } - } - else{ - gl_PointSize = 2.f; - } - */ - //if(!firstRender){ - //CheckdistanceMethod(); - // } - - //temporary things for trying out point sprites. - /* if(!firstRender && vs_color.w != 0){ - vs_st = in_st; - } - else{ - vs_st = vec2(-1); - } - */ - - vec4 position_in_meters = vec4(in_position, 1); - //vec4 positionClipSpace = modelViewProjection * position_in_meters; - //vs_gPosition = vec4(modelViewTransform * dvec4(in_point_position, 1)); - - // gl_PointSize = nodeSize; - //gl_Position = vec4(positionClipSpace.xy, 0, positionClipSpace.w); - // vs_depth = gl_Position.w; - - // if(distance(positionClipSpace.xyz, cameraPos) < 0.f){ -} + */