Merge pull request #389 from OpenSpace/feature/globe-normal-fix

Small Globe Normal Fix
This commit is contained in:
Kalle Bladin
2017-08-16 15:02:08 +02:00
committed by GitHub
2 changed files with 8 additions and 12 deletions

View File

@@ -142,7 +142,9 @@ void ChunkRenderer::setCommonUniforms(ghoul::opengl::ProgramObject& programObjec
chunk.owner().generalProperties().orenNayarRoughness);
}
if (chunk.owner().generalProperties().useAccurateNormals) {
if (chunk.owner().generalProperties().useAccurateNormals &&
!_layerManager->layerGroup(layergroupid::HeightLayers).activeLayers().empty())
{
glm::dvec3 corner00 = chunk.owner().ellipsoid().cartesianSurfacePosition(
chunk.surfacePatch().getCorner(Quad::SOUTH_WEST));
glm::dvec3 corner10 = chunk.owner().ellipsoid().cartesianSurfacePosition(
@@ -176,12 +178,6 @@ void ChunkRenderer::setCommonUniforms(ghoul::opengl::ProgramObject& programObjec
programObject.setUniform("deltaPhi1", glm::length(deltaPhi1));
programObject.setUniform("tileDelta", tileDelta);
}
if (chunk.owner().generalProperties().performShading) {
programObject.setUniform(
"orenNayarRoughness",
chunk.owner().generalProperties().orenNayarRoughness);
}
}
void ChunkRenderer::renderChunkGlobally(const Chunk& chunk, const RenderData& data){
@@ -238,7 +234,7 @@ void ChunkRenderer::renderChunkGlobally(const Chunk& chunk, const RenderData& da
}
if (chunk.owner().generalProperties().useAccurateNormals &&
_layerManager->layerGroup(layergroupid::HeightLayers).activeLayers().size() > 0)
!_layerManager->layerGroup(layergroupid::HeightLayers).activeLayers().empty())
{
// Apply an extra scaling to the height if the object is scaled
programObject->setUniform(

View File

@@ -43,13 +43,13 @@ uniform Layer HeightLayers[NUMLAYERS_HEIGHTMAP];
uniform float heightScale;
#endif // USE_HEIGHTMAP
#if USE_ACCURATE_NORMALS
#if USE_ACCURATE_NORMALS && USE_HEIGHTMAP
uniform float deltaTheta0;
uniform float deltaTheta1;
uniform float deltaPhi0;
uniform float deltaPhi1;
uniform float tileDelta;
#endif //USE_ACCURATE_NORMALS
#endif //USE_ACCURATE_NORMALS && USE_HEIGHTMAP
float getUntransformedTileHeight(vec2 uv, LevelWeights levelWeights) {
float height = CHUNK_DEFAULT_HEIGHT;
@@ -97,7 +97,7 @@ vec3 getTileNormal(vec2 uv, LevelWeights levelWeights, vec3 ellipsoidNormalCamer
vec3 ellipsoidTangentThetaCameraSpace,
vec3 ellipsoidTangentPhiCameraSpace)
{
#if USE_ACCURATE_NORMALS
#if USE_ACCURATE_NORMALS && USE_HEIGHTMAP
float deltaPhi = mix(deltaPhi0, deltaPhi1, uv.x);
float deltaTheta = mix(deltaTheta0, deltaTheta1, uv.y);
@@ -112,7 +112,7 @@ vec3 getTileNormal(vec2 uv, LevelWeights levelWeights, vec3 ellipsoidNormalCamer
vec3 diffPhi = deltaPhiVec + ellipsoidNormalCameraSpace * (height01 - height00);
return normalize(cross(diffTheta, diffPhi));
#else // USE_ACCURATE_NORMALS
#else // USE_ACCURATE_NORMALS && USE_HEIGHTMAP
return ellipsoidNormalCameraSpace;
#endif
}