From 69e0213e79fd4eba7ff82f2cecfa782bcecb1507 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 16 Feb 2015 19:23:23 +0100 Subject: [PATCH] Added ability to disable shading for RenderablePlanet renderables --- .../rendering/planets/renderableplanet.h | 1 + include/openspace/util/constants.h | 5 -- openspace-data | 2 +- shaders/pscstandard_fs.glsl | 61 +++++++++++-------- src/rendering/planets/renderableplanet.cpp | 22 +++++-- 5 files changed, 54 insertions(+), 37 deletions(-) diff --git a/include/openspace/rendering/planets/renderableplanet.h b/include/openspace/rendering/planets/renderableplanet.h index a725337cbd..c2e2f51f0a 100644 --- a/include/openspace/rendering/planets/renderableplanet.h +++ b/include/openspace/rendering/planets/renderableplanet.h @@ -65,6 +65,7 @@ private: ghoul::opengl::ProgramObject* _programObject; ghoul::opengl::Texture* _texture; planetgeometry::PlanetGeometry* _geometry; + properties::BoolProperty _performShading; glm::dmat3 _stateMatrix; diff --git a/include/openspace/util/constants.h b/include/openspace/util/constants.h index 58555328d6..09b93bada4 100644 --- a/include/openspace/util/constants.h +++ b/include/openspace/util/constants.h @@ -76,11 +76,6 @@ namespace renderable { const std::string keyType = "Type"; } // namespace renderable -namespace renderableplanet { - const std::string keyFrame = "Frame"; - const std::string keyGeometry = "Geometry"; -} // namespace renderableplanet - namespace planetgeometry { const std::string keyType = "Type"; } // namespace planetgeometry diff --git a/openspace-data b/openspace-data index 2e076f2479..28895f9911 160000 --- a/openspace-data +++ b/openspace-data @@ -1 +1 @@ -Subproject commit 2e076f247966d2b0bb4923440a0ad7f9e5cd8d4b +Subproject commit 28895f991124dd03dfd21127b49a22153e99f870 diff --git a/shaders/pscstandard_fs.glsl b/shaders/pscstandard_fs.glsl index c1eb075179..c23d5f8393 100644 --- a/shaders/pscstandard_fs.glsl +++ b/shaders/pscstandard_fs.glsl @@ -28,6 +28,7 @@ uniform vec4 campos; uniform vec4 objpos; //uniform vec3 camdir; // add this for specular +uniform bool _performShading = true; uniform float time; uniform sampler2D texture1; @@ -46,33 +47,39 @@ void main() vec4 position = vs_position; float depth = pscDepth(position); vec4 diffuse = texture(texture1, vs_st); - - // directional lighting - vec3 origin = vec3(0.0); - vec4 spec = vec4(0.0); - - vec3 n = normalize(vs_normal.xyz); - //vec3 e = normalize(camdir); - vec3 l_pos = vec3(0.0); // sun. - vec3 l_dir = normalize(l_pos-objpos.xyz); - float intensity = min(max(5*dot(n,l_dir), 0.0), 1); - - float shine = 0.0001; - vec4 specular = vec4(0.5); - vec4 ambient = vec4(0.0,0.0,0.0,1); - /* - if(intensity > 0.f){ - // halfway vector - vec3 h = normalize(l_dir + e); - // specular factor - float intSpec = max(dot(h,n),0.0); - spec = specular * pow(intSpec, shine); + if (_performShading) { + // directional lighting + vec3 origin = vec3(0.0); + vec4 spec = vec4(0.0); + + vec3 n = normalize(vs_normal.xyz); + //vec3 e = normalize(camdir); + vec3 l_pos = vec3(0.0); // sun. + vec3 l_dir = normalize(l_pos-objpos.xyz); + float intensity = min(max(5*dot(n,l_dir), 0.0), 1); + + float shine = 0.0001; + + vec4 specular = vec4(0.5); + vec4 ambient = vec4(0.0,0.0,0.0,1); + /* + if(intensity > 0.f){ + // halfway vector + vec3 h = normalize(l_dir + e); + // specular factor + float intSpec = max(dot(h,n),0.0); + spec = specular * pow(intSpec, shine); + } + */ + diffuse = max(intensity * diffuse, ambient); + //diffuse = vec4(1); + + ABufferStruct_t frag = createGeometryFragment(diffuse, position, depth); + addToBuffer(frag); + } + else { + ABufferStruct_t frag = createGeometryFragment(diffuse, position, depth); + addToBuffer(frag); } - */ - diffuse = max(intensity * diffuse, ambient); - //diffuse = vec4(1); - - ABufferStruct_t frag = createGeometryFragment(diffuse, position, depth); - addToBuffer(frag); } \ No newline at end of file diff --git a/src/rendering/planets/renderableplanet.cpp b/src/rendering/planets/renderableplanet.cpp index 232c7bb0fd..f3807c5171 100644 --- a/src/rendering/planets/renderableplanet.cpp +++ b/src/rendering/planets/renderableplanet.cpp @@ -40,7 +40,11 @@ #include namespace { -const std::string _loggerCat = "RenderablePlanet"; + const std::string _loggerCat = "RenderablePlanet"; + + const std::string keyFrame = "Frame"; + const std::string keyGeometry = "Geometry"; + const std::string keyShading = "PerformShading"; } namespace openspace { @@ -51,6 +55,7 @@ RenderablePlanet::RenderablePlanet(const ghoul::Dictionary& dictionary) , _programObject(nullptr) , _texture(nullptr) , _geometry(nullptr) + , _performShading("performShading", "Perform Shading", true) { std::string name; bool success = dictionary.getValue(constants::scenegraphnode::keyName, name); @@ -63,15 +68,14 @@ RenderablePlanet::RenderablePlanet(const ghoul::Dictionary& dictionary) "RenderablePlanet need the '"<(keyShading)) { + bool shading; + dictionary.getValue(keyShading, shading); + _performShading = shading; + } + + addProperty(_performShading); } RenderablePlanet::~RenderablePlanet() { @@ -147,6 +159,8 @@ void RenderablePlanet::render(const RenderData& data) _programObject->setUniform("ModelTransform", transform); setPscUniforms(_programObject, &data.camera, data.position); + _programObject->setUniform("_performShading", _performShading); + // Bind texture ghoul::opengl::TextureUnit unit; unit.activate();