clouds: use real terrain height for cloud occlusion
This commit is contained in:
1 parent
3cc741e86f
commit
20af6dcdd5
1 file changed
+5
-2
Vendored
+5
-2
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user