Mugen87 8 роки тому
батько
коміт
75f360cd20
1 змінених файлів з 86 додано та 57 видалено
  1. 86 57
      examples/webgl_postprocessing_outline.html

+ 86 - 57
examples/webgl_postprocessing_outline.html

@@ -43,7 +43,7 @@
 		<script src="js/shaders/FXAAShader.js"></script>
 		<script src="js/shaders/FXAAShader.js"></script>
 		<script src="js/postprocessing/EffectComposer.js"></script>
 		<script src="js/postprocessing/EffectComposer.js"></script>
 		<script src="js/postprocessing/RenderPass.js"></script>
 		<script src="js/postprocessing/RenderPass.js"></script>
-    <script src="js/postprocessing/ShaderPass.js"></script>
+		<script src="js/postprocessing/ShaderPass.js"></script>
 		<script src="js/postprocessing/OutlinePass.js"></script>
 		<script src="js/postprocessing/OutlinePass.js"></script>
 		<script src="js/libs/stats.min.js"></script>
 		<script src="js/libs/stats.min.js"></script>
 		<script src='js/libs/dat.gui.min.js'></script>
 		<script src='js/libs/dat.gui.min.js'></script>
@@ -57,8 +57,7 @@
 			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
 			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
 
 
 			var container, stats;
 			var container, stats;
-			var camera, scene, renderer, controls;
-			var mesh, decal;
+			var camera, scene, renderer;
 			var raycaster = new THREE.Raycaster();
 			var raycaster = new THREE.Raycaster();
 
 
 			var mouse = new THREE.Vector2();
 			var mouse = new THREE.Vector2();
@@ -67,7 +66,7 @@
 			var composer, effectFXAA, outlinePass;
 			var composer, effectFXAA, outlinePass;
 			var obj3d = new THREE.Object3D();
 			var obj3d = new THREE.Object3D();
 
 
-			var group = new THREE.Object3D();
+			var group = new THREE.Group();
 
 
 			var params = {
 			var params = {
 				edgeStrength: 3.0,
 				edgeStrength: 3.0,
@@ -79,68 +78,77 @@
 			};
 			};
 
 
 			// Init gui
 			// Init gui
-			var gui = new dat.GUI();
-			gui.add(params, "edgeStrength", 0.01, 10).onChange(function( value ) {
-				outlinePass.edgeStrength = Number(value);
+			var gui = new dat.GUI( { width: 300 } );
+			gui.add( params, 'edgeStrength', 0.01, 10 ).onChange( function( value ) {
+				outlinePass.edgeStrength = Number( value );
 			});
 			});
-			gui.add(params, "edgeGlow", 0.0, 1).onChange(function( value ) {
-				outlinePass.edgeGlow = Number(value);
+			gui.add( params, 'edgeGlow', 0.0, 1 ).onChange( function( value ) {
+				outlinePass.edgeGlow = Number( value );
 			});
 			});
-			gui.add(params, "edgeThickness", 1, 4).onChange(function( value ) {
-				outlinePass.edgeThickness = Number(value);
+			gui.add( params, 'edgeThickness', 1, 4 ).onChange( function( value ) {
+				outlinePass.edgeThickness = Number( value );
 			});
 			});
-			gui.add(params, "pulsePeriod", 0.0, 5).onChange(function( value ) {
-				outlinePass.pulsePeriod = Number(value);
+			gui.add( params, 'pulsePeriod', 0.0, 5 ).onChange( function( value ) {
+				outlinePass.pulsePeriod = Number( value );
 			});
 			});
-			gui.add(params, "rotate");
-			gui.add(params, "usePatternTexture").onChange(function( value ) {
+			gui.add( params, 'rotate' );
+			gui.add( params, 'usePatternTexture' ).onChange( function( value ) {
 				outlinePass.usePatternTexture = value;
 				outlinePass.usePatternTexture = value;
 			});
 			});
 			var Configuration = function() {
 			var Configuration = function() {
-				this.visibleEdgeColor = "#ffffff";
-				this.hiddenEdgeColor  = "#190a05";
+				this.visibleEdgeColor = '#ffffff';
+				this.hiddenEdgeColor  = '#190a05';
 			};
 			};
 			var conf = new Configuration();
 			var conf = new Configuration();
 
 
-			var controladorVisible = gui.addColor( conf, 'visibleEdgeColor');
-				var controladorHidden = gui.addColor( conf, 'hiddenEdgeColor');
-			controladorVisible.onChange(function( colorValue ) {
+			var controladorVisible = gui.addColor( conf, 'visibleEdgeColor' );
+			var controladorHidden = gui.addColor( conf, 'hiddenEdgeColor' );
+
+			controladorVisible.onChange( function( colorValue ) {
 				//the return value by the chooser is like as: #ffff
 				//the return value by the chooser is like as: #ffff
-				colorValue = colorValue.replace('#', '');
+				colorValue = colorValue.replace( '#', '' );
+
 				function hexToRgb( hex ) {
 				function hexToRgb( hex ) {
-					var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+
+					var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec( hex );
 					return result ? {
 					return result ? {
-						r: parseInt(result[ 1 ], 16),
-						g: parseInt(result[ 2 ], 16),
-						b: parseInt(result[ 3 ], 16)
+						r: parseInt( result[ 1 ], 16 ),
+						g: parseInt( result[ 2 ], 16 ),
+						b: parseInt( result[ 3 ], 16 )
 					} : null;
 					} : null;
+
 				}
 				}
 
 
-				var rgba  = hexToRgb(colorValue);
+				var rgba  = hexToRgb( colorValue );
 				var color = outlinePass.visibleEdgeColor;
 				var color = outlinePass.visibleEdgeColor;
 				color.r   = rgba.r / 255;
 				color.r   = rgba.r / 255;
 				color.g   = rgba.g / 255;
 				color.g   = rgba.g / 255;
 				color.b   = rgba.b / 255;
 				color.b   = rgba.b / 255;
-			});
 
 
-			controladorHidden.onChange(function( colorValue ) {
+			} );
+
+			controladorHidden.onChange( function( colorValue ) {
 				//the return value by the chooser is like as: #ffff
 				//the return value by the chooser is like as: #ffff
-				colorValue = colorValue.replace('#', '');
+				colorValue = colorValue.replace( '#', '' );
+
 				function hexToRgb( hex ) {
 				function hexToRgb( hex ) {
-					var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+
+					var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec( hex );
 					return result ? {
 					return result ? {
-						r: parseInt(result[ 1 ], 16),
-						g: parseInt(result[ 2 ], 16),
-						b: parseInt(result[ 3 ], 16)
+						r: parseInt( result[ 1 ], 16 ),
+						g: parseInt( result[ 2 ], 16 ),
+						b: parseInt( result[ 3 ], 16 )
 					} : null;
 					} : null;
+
 				}
 				}
 
 
-				var rgba  = hexToRgb(colorValue);
+				var rgba  = hexToRgb( colorValue );
 				var color = outlinePass.hiddenEdgeColor;
 				var color = outlinePass.hiddenEdgeColor;
 				color.r   = rgba.r / 255;
 				color.r   = rgba.r / 255;
 				color.g   = rgba.g / 255;
 				color.g   = rgba.g / 255;
 				color.b   = rgba.b / 255;
 				color.b   = rgba.b / 255;
-			});
+
+			} );
 
 
 			init();
 			init();
 			animate();
 			animate();
@@ -152,12 +160,10 @@
 
 
 				var width = window.innerWidth || 1;
 				var width = window.innerWidth || 1;
 				var height = window.innerHeight || 1;
 				var height = window.innerHeight || 1;
-				var devicePixelRatio = window.devicePixelRatio || 1;
 
 
 				renderer = new THREE.WebGLRenderer( { antialias: false } );
 				renderer = new THREE.WebGLRenderer( { antialias: false } );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.setClearColor( 0xa0a0a0 );
 				renderer.setClearColor( 0xa0a0a0 );
-				renderer.setPixelRatio( 1 );
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
@@ -174,34 +180,43 @@
 				// model
 				// model
 				var loader = new THREE.OBJLoader( manager );
 				var loader = new THREE.OBJLoader( manager );
 				loader.load( 'models/obj/tree.obj', function ( object ) {
 				loader.load( 'models/obj/tree.obj', function ( object ) {
+
 					var scale = 1.0;
 					var scale = 1.0;
+
 					object.traverse( function ( child ) {
 					object.traverse( function ( child ) {
+
 						if ( child instanceof THREE.Mesh ) {
 						if ( child instanceof THREE.Mesh ) {
+
 							child.geometry.center();
 							child.geometry.center();
 							child.geometry.computeBoundingSphere();
 							child.geometry.computeBoundingSphere();
-							scale = 0.2*child.geometry.boundingSphere.radius;
+							scale = 0.2 * child.geometry.boundingSphere.radius;
 							var phongMaterial = new THREE.MeshPhongMaterial( { color: 0xffffff, specular: 0xffffff, shininess: 5 } );
 							var phongMaterial = new THREE.MeshPhongMaterial( { color: 0xffffff, specular: 0xffffff, shininess: 5 } );
 							child.material = phongMaterial;
 							child.material = phongMaterial;
 							child.material.side = THREE.DoubleSide;
 							child.material.side = THREE.DoubleSide;
 							child.receiveShadow = true;
 							child.receiveShadow = true;
 							child.castShadow = true;
 							child.castShadow = true;
+
 						}
 						}
+
 					} );
 					} );
+
 					object.position.y = 1;
 					object.position.y = 1;
 					object.scale.x /= scale;
 					object.scale.x /= scale;
 					object.scale.y /= scale;
 					object.scale.y /= scale;
 					object.scale.z /= scale;
 					object.scale.z /= scale;
 					obj3d.add( object );
 					obj3d.add( object );
+
 				} );
 				} );
-				group.add(obj3d);
 
 
-				controls = new THREE.OrbitControls( camera, renderer.domElement );
+				group.add( obj3d );
+
+				var controls = new THREE.OrbitControls( camera, renderer.domElement );
 				controls.enableDamping = true;
 				controls.enableDamping = true;
 				controls.dampingFactor = 0.25;
 				controls.dampingFactor = 0.25;
 
 
 				scene.add( group );
 				scene.add( group );
 
 
-				var light = new THREE.DirectionalLight( 0xddffdd, 0.4);
+				var light = new THREE.DirectionalLight( 0xddffdd, 0.4 );
 				light.position.z = 1;
 				light.position.z = 1;
 				light.position.y = 1;
 				light.position.y = 1;
 				light.position.x = 1;
 				light.position.x = 1;
@@ -236,11 +251,10 @@
 				scene.add( light3 );
 				scene.add( light3 );
 
 
 				var geometry = new THREE.SphereBufferGeometry( 3, 48, 24 );
 				var geometry = new THREE.SphereBufferGeometry( 3, 48, 24 );
+
 				for ( var i = 0; i < 20; i ++ ) {
 				for ( var i = 0; i < 20; i ++ ) {
 
 
 					var material = new THREE.MeshLambertMaterial();
 					var material = new THREE.MeshLambertMaterial();
-					material.roughness = 1;//0.5 * Math.random() + 0.25;
-					material.metalness = 0;
 					material.color.setHSL( Math.random(), 1.0, 0.3 );
 					material.color.setHSL( Math.random(), 1.0, 0.3 );
 
 
 					var mesh = new THREE.Mesh( geometry, material );
 					var mesh = new THREE.Mesh( geometry, material );
@@ -254,6 +268,7 @@
 					mesh.castShadow = true;
 					mesh.castShadow = true;
 					mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 0.3 + 0.1;
 					mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 0.3 + 0.1;
 					group.add( mesh );
 					group.add( mesh );
+
 				}
 				}
 
 
 				var floorMaterial = new THREE.MeshLambertMaterial();
 				var floorMaterial = new THREE.MeshLambertMaterial();
@@ -268,7 +283,7 @@
 				group.add( floorMesh );
 				group.add( floorMesh );
 				floorMesh.receiveShadow = true;
 				floorMesh.receiveShadow = true;
 
 
-				var geometry = new THREE.TorusGeometry( 1, 0.3, 16, 100 );
+				var geometry = new THREE.TorusBufferGeometry( 1, 0.3, 16, 100 );
 				var material = new THREE.MeshPhongMaterial( { color: 0xffaaff } );
 				var material = new THREE.MeshPhongMaterial( { color: 0xffaaff } );
 				var torus = new THREE.Mesh( geometry, material );
 				var torus = new THREE.Mesh( geometry, material );
 				torus.position.z = -4;
 				torus.position.z = -4;
@@ -285,12 +300,15 @@
 				var renderPass = new THREE.RenderPass( scene, camera );
 				var renderPass = new THREE.RenderPass( scene, camera );
 				composer.addPass( renderPass );
 				composer.addPass( renderPass );
 
 
-				outlinePass = new THREE.OutlinePass( new THREE.Vector2(window.innerWidth, window.innerHeight), scene, camera);
+				outlinePass = new THREE.OutlinePass( new THREE.Vector2( window.innerWidth, window.innerHeight ), scene, camera);
 				composer.addPass( outlinePass );
 				composer.addPass( outlinePass );
+
 				var onLoad = function ( texture ) {
 				var onLoad = function ( texture ) {
+
 					outlinePass.patternTexture = texture;
 					outlinePass.patternTexture = texture;
 					texture.wrapS = THREE.RepeatWrapping;
 					texture.wrapS = THREE.RepeatWrapping;
 					texture.wrapT = THREE.RepeatWrapping;
 					texture.wrapT = THREE.RepeatWrapping;
+
 				};
 				};
 
 
 				var loader = new THREE.TextureLoader();
 				var loader = new THREE.TextureLoader();
@@ -299,12 +317,12 @@
 				loader.load(
 				loader.load(
 					// resource URL
 					// resource URL
 					'textures/tri_pattern.jpg',
 					'textures/tri_pattern.jpg',
-					// Function when resource is loaded
+					// function when resource is loaded
 					onLoad
 					onLoad
 				);
 				);
 
 
-				effectFXAA = new THREE.ShaderPass(THREE.FXAAShader);
-				effectFXAA.uniforms['resolution'].value.set(1 / window.innerWidth, 1 / window.innerHeight );
+				effectFXAA = new THREE.ShaderPass( THREE.FXAAShader );
+				effectFXAA.uniforms[ 'resolution' ].value.set( 1 / window.innerWidth, 1 / window.innerHeight );
 				effectFXAA.renderToScreen = true;
 				effectFXAA.renderToScreen = true;
 				composer.addPass( effectFXAA );
 				composer.addPass( effectFXAA );
 
 
@@ -336,9 +354,11 @@
 
 
 				}
 				}
 
 
-				function addSelectedObject(object) {
+				function addSelectedObject( object ) {
+
 					selectedObjects = [];
 					selectedObjects = [];
-					selectedObjects.push(object);
+					selectedObjects.push( object );
+
 				}
 				}
 
 
 				function checkIntersection() {
 				function checkIntersection() {
@@ -348,13 +368,17 @@
 					var intersects = raycaster.intersectObjects( [ scene ], true );
 					var intersects = raycaster.intersectObjects( [ scene ], true );
 
 
 					if ( intersects.length > 0 ) {
 					if ( intersects.length > 0 ) {
+
 						var selectedObject = intersects[ 0 ].object;
 						var selectedObject = intersects[ 0 ].object;
-						addSelectedObject(selectedObject);
+						addSelectedObject( selectedObject );
 						outlinePass.selectedObjects = selectedObjects;
 						outlinePass.selectedObjects = selectedObjects;
-					}
-					else {
+
+					} else {
+
 						// outlinePass.selectedObjects = [];
 						// outlinePass.selectedObjects = [];
+
 					}
 					}
+
 				}
 				}
 
 
 			}
 			}
@@ -363,14 +387,14 @@
 
 
 				var width = window.innerWidth || 1;
 				var width = window.innerWidth || 1;
 				var height = window.innerHeight || 1;
 				var height = window.innerHeight || 1;
-				var devicePixelRatio = window.devicePixelRatio || 1;
 
 
 				camera.aspect = width / height;
 				camera.aspect = width / height;
 				camera.updateProjectionMatrix();
 				camera.updateProjectionMatrix();
 
 
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
 				composer.setSize( width, height );
 				composer.setSize( width, height );
-				effectFXAA.uniforms['resolution'].value.set(1 / window.innerWidth, 1 / window.innerHeight );
+				effectFXAA.uniforms[ 'resolution' ].value.set( 1 / window.innerWidth, 1 / window.innerHeight );
+
 			}
 			}
 
 
 			function animate() {
 			function animate() {
@@ -380,16 +404,21 @@
 				stats.begin();
 				stats.begin();
 
 
 				var timer = performance.now();
 				var timer = performance.now();
-				if(params.rotate)
+
+				if ( params.rotate ) {
+
 					group.rotation.y = timer * 0.0001;
 					group.rotation.y = timer * 0.0001;
+
+				}
+
 				renderer.autoClear = true;
 				renderer.autoClear = true;
 				renderer.setClearColor( 0xfff0f0 );
 				renderer.setClearColor( 0xfff0f0 );
 				renderer.setClearAlpha( 0.0 );
 				renderer.setClearAlpha( 0.0 );
 
 
 				composer.render();
 				composer.render();
 				stats.end();
 				stats.end();
-			}
 
 
+			}
 
 
 		</script>
 		</script>
 	</body>
 	</body>