diff --git a/vendor/clouds3d.js b/vendor/clouds3d.js index 3ccaf5f..7c1351f 100644 --- a/vendor/clouds3d.js +++ b/vendor/clouds3d.js @@ -79,6 +79,7 @@ var FRAG_SRC = [ 'uniform sampler2D uElev;', // terrarium RGB height grid, same UV as uGround 'uniform float uElevOn;', // terrain enabled (0/1) 'uniform float uElevScale;', // metres -> world units (incl. exaggeration) + 'uniform float uTerrainExag;', // terrain vertical exaggeration 'uniform vec3 uSunDir;', // unit vector towards the sun (world X,Y,Z) 'uniform vec3 uMoonDir;', // unit vector towards the moon (world X,Y,Z) 'uniform sampler2D uSkyTex;', // baked star catalogue + Milky Way (equirect) @@ -675,7 +676,7 @@ var FRAG_SRC = [ 'float distNorm = (distTex.r * 65536.0 + distTex.g * 256.0 + distTex.b) / 16777215.0;', 'float dist = distNorm * max(1.0, uFarPlane);', 'vec3 pT = uCamPos + rd * dist;', - 'float terrainAlt = pT.y + earthDrop(pT.xz);', + 'float terrainAlt = (pT.y + earthDrop(pT.xz)) / max(1.0, uTerrainExag);', 'if (terrainAlt > uCloudTop + 0.05) { gl_FragColor = vec4(0.0); return; }', '}', '}', @@ -1103,6 +1104,7 @@ function init(canvas) { var uElev = gl.getUniformLocation(prog, 'uElev'); var uElevOn = gl.getUniformLocation(prog, 'uElevOn'); var uElevScale = gl.getUniformLocation(prog, 'uElevScale'); + var uTerrainExag = gl.getUniformLocation(prog, 'uTerrainExag'); var uSunDir = gl.getUniformLocation(prog, 'uSunDir'); var uMoonDir = gl.getUniformLocation(prog, 'uMoonDir'); var uMode = gl.getUniformLocation(prog, 'uMode'); @@ -1255,7 +1257,7 @@ function init(canvas) { uSpeed: uSpeed, uDensity: uDensity, uDayProgress: uDayProgress, uSunAlt: uSunAlt, uCloudTop: uCloudTop, uCloudBot: uCloudBot, - uElev: uElev, uElevOn: uElevOn, uElevScale: uElevScale, + uElev: uElev, uElevOn: uElevOn, uElevScale: uElevScale, uTerrainExag: uTerrainExag, uSunDir: uSunDir, uMoonDir: uMoonDir, uMode: uMode, uAtmoModelOn: uAtmoModelOn, uAtmoHeightUnits: uAtmoHeightUnits, uAtmoScaleHeightUnits: uAtmoScaleHeightUnits, uAtmoDensity: uAtmoDensity, @@ -5834,6 +5836,7 @@ window.clouds3dRender = function(target) { gl.uniform1i(s.uElev, 2); gl.uniform1f(s.uElevOn, (elevTexture && TERRAIN_ON > 0.5) ? 1.0 : 0.0); gl.uniform1f(s.uElevScale, ELEV_SCALE_UNITS); + gl.uniform1f(s.uTerrainExag, TERRAIN_EXAG); var sd = window.__currentSunDir || [0, 0.7, 0.7]; gl.uniform3f(s.uSunDir, sd[0], sd[1], sd[2]); var md = window.__currentMoonDir || sd;