|
@@ -1,7 +1,7 @@
|
|
|
<!DOCTYPE html>
|
|
|
<html lang="en">
|
|
|
<head>
|
|
|
- <title>three.js webgl - materials - normal map [Lee Perry-Smith]</title>
|
|
|
+ <title>three.js webgl - materials - modified</title>
|
|
|
<meta charset="utf-8">
|
|
|
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
|
|
|
<style>
|
|
@@ -34,22 +34,13 @@
|
|
|
color:#fff;
|
|
|
}
|
|
|
|
|
|
- #vt { display:none }
|
|
|
- #vt, #vt a { color:orange; }
|
|
|
- .code { }
|
|
|
-
|
|
|
</style>
|
|
|
</head>
|
|
|
|
|
|
<body>
|
|
|
<div id="info">
|
|
|
- <a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> - webgl normalmap demo.
|
|
|
+ <a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> wegbl - modified material.
|
|
|
<a href="http://graphics.cs.williams.edu/data/meshes.xml#14" target="_blank" rel="noopener">Lee Perry-Smith</a> head.
|
|
|
-
|
|
|
- <div id="vt">displacement mapping needs vertex textures (GPU with Shader Model 3.0)<br/>
|
|
|
- on Windows use <span class="code">Chrome --use-gl=desktop</span> or Firefox 4<br/>
|
|
|
- please star this <a href="http://code.google.com/p/chromium/issues/detail?id=52497">Chrome issue</a> to get ANGLE support
|
|
|
- </div>
|
|
|
</div>
|
|
|
|
|
|
<script src="../build/three.js"></script>
|
|
@@ -77,8 +68,6 @@
|
|
|
|
|
|
var mesh;
|
|
|
|
|
|
- var directionalLight, pointLight, ambientLight;
|
|
|
-
|
|
|
var mouseX = 0;
|
|
|
var mouseY = 0;
|
|
|
|
|
@@ -88,8 +77,6 @@
|
|
|
var windowHalfX = window.innerWidth / 2;
|
|
|
var windowHalfY = window.innerHeight / 2;
|
|
|
|
|
|
- var composer, effectFXAA;
|
|
|
-
|
|
|
init();
|
|
|
animate();
|
|
|
|
|
@@ -103,48 +90,21 @@
|
|
|
|
|
|
scene = new THREE.Scene();
|
|
|
|
|
|
- // LIGHTS
|
|
|
-
|
|
|
- ambientLight = new THREE.AmbientLight( 0x444444 );
|
|
|
- scene.add( ambientLight );
|
|
|
-
|
|
|
- pointLight = new THREE.PointLight( 0xffffff, 1.25, 1000 );
|
|
|
- pointLight.position.set( 0, 0, 600 );
|
|
|
-
|
|
|
- scene.add( pointLight );
|
|
|
-
|
|
|
- directionalLight = new THREE.DirectionalLight( 0xffffff );
|
|
|
- directionalLight.position.set( 1, -0.5, -1 );
|
|
|
- scene.add( directionalLight );
|
|
|
-
|
|
|
- var textureLoader = new THREE.TextureLoader();
|
|
|
-
|
|
|
- var material = new THREE.MeshPhongMaterial( {
|
|
|
- color: 0xdddddd,
|
|
|
- specular: 0x222222,
|
|
|
- shininess: 35,
|
|
|
- map: textureLoader.load( "obj/leeperrysmith/Map-COL.jpg" ),
|
|
|
- specularMap: textureLoader.load( "obj/leeperrysmith/Map-SPEC.jpg" ),
|
|
|
- normalMap: textureLoader.load( "obj/leeperrysmith/Infinite-Level_02_Tangent_SmoothUV.jpg" ),
|
|
|
- normalScale: new THREE.Vector2( 0.8, 0.8 )
|
|
|
- } );
|
|
|
-
|
|
|
+ var material = new THREE.MeshNormalMaterial();
|
|
|
material.onBeforeCompile = function () {
|
|
|
|
|
|
var shader = this.__webglShader;
|
|
|
|
|
|
+ // console.log( shader );
|
|
|
+
|
|
|
shader.uniforms.time = { value: 0 };
|
|
|
|
|
|
+ shader.vertexShader = 'uniform float time;\n' + shader.vertexShader;
|
|
|
shader.vertexShader = shader.vertexShader.replace(
|
|
|
'#include <begin_vertex>',
|
|
|
'vec3 transformed = vec3( position.x + sin( time + position.y ) / 2.0, position.y, position.z );'
|
|
|
);
|
|
|
|
|
|
- shader.vertexShader = shader.vertexShader.replace(
|
|
|
- '#include <common>',
|
|
|
- '#include <common>\nuniform float time;'
|
|
|
- );
|
|
|
-
|
|
|
};
|
|
|
|
|
|
loader = new THREE.JSONLoader();
|
|
@@ -158,49 +118,15 @@
|
|
|
} );
|
|
|
|
|
|
renderer = new THREE.WebGLRenderer( { antialias: false } );
|
|
|
- renderer.setClearColor( 0x111111 );
|
|
|
+ renderer.setPixelRatio( window.devicePixelRatio );
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
container.appendChild( renderer.domElement );
|
|
|
|
|
|
//
|
|
|
|
|
|
- renderer.gammaInput = true;
|
|
|
- renderer.gammaOutput = true;
|
|
|
-
|
|
|
- //
|
|
|
-
|
|
|
stats = new Stats();
|
|
|
container.appendChild( stats.dom );
|
|
|
|
|
|
-
|
|
|
- // COMPOSER
|
|
|
-
|
|
|
- renderer.autoClear = false;
|
|
|
-
|
|
|
- var renderModel = new THREE.RenderPass( scene, camera );
|
|
|
-
|
|
|
- var effectBleach = new THREE.ShaderPass( THREE.BleachBypassShader );
|
|
|
- var effectColor = new THREE.ShaderPass( THREE.ColorCorrectionShader );
|
|
|
- effectFXAA = new THREE.ShaderPass( THREE.FXAAShader );
|
|
|
-
|
|
|
- var canvas = renderer.context.canvas;
|
|
|
-
|
|
|
- effectFXAA.uniforms[ 'resolution' ].value.set( 1 / window.innerWidth, 1 / window.innerHeight );
|
|
|
-
|
|
|
- effectBleach.uniforms[ 'opacity' ].value = 0.4;
|
|
|
-
|
|
|
- effectColor.uniforms[ 'powRGB' ].value.set( 1.4, 1.45, 1.45 );
|
|
|
- effectColor.uniforms[ 'mulRGB' ].value.set( 1.1, 1.1, 1.1 );
|
|
|
-
|
|
|
- effectColor.renderToScreen = true;
|
|
|
-
|
|
|
- composer = new THREE.EffectComposer( renderer );
|
|
|
-
|
|
|
- composer.addPass( renderModel );
|
|
|
- composer.addPass( effectFXAA );
|
|
|
- composer.addPass( effectBleach );
|
|
|
- composer.addPass( effectColor );
|
|
|
-
|
|
|
// EVENTS
|
|
|
|
|
|
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
|
|
@@ -219,9 +145,6 @@
|
|
|
camera.updateProjectionMatrix();
|
|
|
|
|
|
renderer.setSize( width, height );
|
|
|
- composer.setSize( width, height );
|
|
|
-
|
|
|
- effectFXAA.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -262,7 +185,7 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- composer.render();
|
|
|
+ renderer.render( scene, camera );
|
|
|
|
|
|
}
|
|
|
|