diff --git a/examples/js/ShaderExtras.js b/examples/js/ShaderExtras.js index 7147704b..7dd7517d 100644 --- a/examples/js/ShaderExtras.js +++ b/examples/js/ShaderExtras.js @@ -21,6 +21,7 @@ * blend * fxaa * luminosity + * normalmap */ THREE.ShaderExtras = { @@ -1281,6 +1282,59 @@ THREE.ShaderExtras = { }, + /* ------------------------------------------------------------------------- + // Normal map shader + // - compute normals from heightmap + ------------------------------------------------------------------------- */ + + 'normalmap': { + + uniforms: { + + "heightMap" : { type: "t", value: 0, texture: null }, + "resolution": { type: "v2", value: new THREE.Vector2( 512, 512 ) }, + "scale" : { type: "v2", value: new THREE.Vector2( 1, 1 ) }, + "height" : { type: "f", value: 0.05 } + + }, + + vertexShader: [ + + "varying vec2 vUv;", + + "void main() {", + + "vUv = vec2( uv.x, 1.0 - uv.y );", + + "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + + "}" + + ].join("\n"), + + fragmentShader: [ + + "uniform float height;", + "uniform vec2 resolution;", + "uniform sampler2D heightMap;", + + "varying vec2 vUv;", + + "void main() {", + + "float val = texture2D( heightMap, vUv ).x;", + + "float valU = texture2D( heightMap, vUv + vec2( 1.0 / resolution.x, 0.0 ) ).x;", + "float valV = texture2D( heightMap, vUv + vec2( 0.0, 1.0 / resolution.y ) ).x;", + + "gl_FragColor = vec4( ( 0.5 * normalize( vec3( val - valU, val - valV, height ) ) + 0.5 ), 1.0 );", + + "}", + + ].join("\n") + + }, + // METHODS buildKernel: function( sigma ) { diff --git a/examples/webgl_terrain_dynamic.html b/examples/webgl_terrain_dynamic.html index ccf9ff0a..c20dc833 100644 --- a/examples/webgl_terrain_dynamic.html +++ b/examples/webgl_terrain_dynamic.html @@ -78,27 +78,6 @@ - - - -