Kaynağa Gözat

rename webgl_materials_cubemap_dynamic2 to webgl_materials_cubemap_dynamic

Lewy Blue 7 yıl önce
ebeveyn
işleme
150a4b8914

+ 0 - 1
examples/files.js

@@ -149,7 +149,6 @@ var files = {
 		"webgl_materials_cubemap_balls_reflection",
 		"webgl_materials_cubemap_balls_refraction",
 		"webgl_materials_cubemap_dynamic",
-		"webgl_materials_cubemap_dynamic2",
 		"webgl_materials_cubemap_refraction",
 		"webgl_materials_curvature",
 		"webgl_materials_displacementmap",

+ 104 - 878
examples/webgl_materials_cubemap_dynamic.html

@@ -1,4 +1,4 @@
-<!DOCTYPE HTML>
+<!DOCTYPE html>
 <html lang="en">
 	<head>
 		<title>three.js webgl - materials - dynamic cube reflection</title>
@@ -6,982 +6,208 @@
 		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
 		<style>
 			body {
-				background: #000;
-				color: #333;
-				padding: 0;
-				margin: 0;
+				background-color: #000000;
+				margin: 0px;
 				overflow: hidden;
-				font-family: georgia;
-				font-size:1em;
-				text-align: center;
 			}
-			a { color: white }
 
-			#info { position: absolute; top: 10px; width: 100%; }
-			#container { position: absolute; top: 0px; }
-			#footer { position: absolute; bottom: 10px; width: 100%; }
+			#info {
+				position: absolute;
+				top: 0px; width: 100%;
+				color: #ffffff;
+				padding: 5px;
+				font-family:Monospace;
+				font-size:13px;
+				font-weight: bold;
+				text-align:center;
+			}
 
-			.h { color: skyblue }
-			.c { display: inline; margin-left: 1em }
+			a {
+				color: #ffffff;
+			}
 		</style>
 	</head>
-
 	<body>
-		<div id="container"></div>
-
-		<div id="info">
-			<a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> - webgl dynamic cube reflection demo -
-			veyron by <a href="http://artist-3d.com/free_3d_models/dnm/model_disp.php?uid=1129" target="_blank" rel="noopener">Troyano</a> -
-			gallardo by <a href="http://artist-3d.com/free_3d_models/dnm/model_disp.php?uid=1711" target="_blank" rel="noopener">machman_3d</a>
-		</div>
-
-		<div id="footer">
-			cars control: <span class="h">WASD</span> / <span class="h">arrows</span>
 
-			<div class="c">cameras: <span class="h">1</span> / <span class="h">2</span> / <span class="h">3</span> / <span class="h">4</span>
-			/ <span class="h">5</span> / <span class="h">6</span>
-			</div>
-
-			<div class="c">
-			day / night: <span class="h">n</span>
-			</div>
-
-			<div class="c">
-			motion blur: <span class="h">b</span>
-			</div>
-		</div>
+		<div id="info"><a href="http://threejs.org" target="_blank" rel="noopener">three.js webgl</a> - materials - dynamic cube reflection<br/>Photo by <a href="http://www.flickr.com/photos/jonragnarsson/2294472375/" target="_blank" rel="noopener">J&oacute;n Ragnarsson</a>.</div>
 
 		<script src="../build/three.js"></script>
 
-		<script src="js/loaders/BinaryLoader.js"></script>
-
-		<script src="js/shaders/BleachBypassShader.js"></script>
-		<script src="js/shaders/BlendShader.js"></script>
-		<script src="js/shaders/ConvolutionShader.js"></script>
-		<script src="js/shaders/CopyShader.js"></script>
-		<script src="js/shaders/FXAAShader.js"></script>
-		<script src="js/shaders/HorizontalTiltShiftShader.js"></script>
-		<script src="js/shaders/VerticalTiltShiftShader.js"></script>
-		<script src="js/shaders/TriangleBlurShader.js"></script>
-		<script src="js/shaders/VignetteShader.js"></script>
-
-		<script src="js/postprocessing/EffectComposer.js"></script>
-		<script src="js/postprocessing/RenderPass.js"></script>
-		<script src="js/postprocessing/BloomPass.js"></script>
-		<script src="js/postprocessing/ShaderPass.js"></script>
-		<script src="js/postprocessing/MaskPass.js"></script>
-		<script src="js/postprocessing/SavePass.js"></script>
-
-		<script src="js/Car.js"></script>
-		<script src="js/Detector.js"></script>
-		<script src="js/libs/stats.min.js"></script>
-
 		<script>
 
-			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
-
-			var FOLLOW_CAMERA = false;
-
-			var SCREEN_WIDTH = window.innerWidth;
-			var SCREEN_HEIGHT = window.innerHeight;
-
-			var SHADOW_MAP_WIDTH = 1024, SHADOW_MAP_HEIGHT = 1024;
-
-			var container, stats;
-
-			var camera, cameraTarget, scene, renderer;
-			var renderTarget;
-
-			var spotLight, ambientLight;
-
-			var cubeCamera;
-
-			var clock = new THREE.Clock();
-
-			var controlsGallardo = {
-
-				moveForward: false,
-				moveBackward: false,
-				moveLeft: false,
-				moveRight: false
-
-			};
-
-			var controlsVeyron = {
+			var camera, scene, renderer;
+			var cube, sphere, torus, material;
 
-				moveForward: false,
-				moveBackward: false,
-				moveLeft: false,
-				moveRight: false
+			var count = 0, cubeCamera1, cubeCamera2;
 
-			};
+			var lon = 0, lat = 0;
+			var phi = 0, theta = 0;
 
-			var mlib;
+			var textureLoader = new THREE.TextureLoader();
 
-			var gallardo, veyron, currentCar;
+			textureLoader.load( 'textures/2294472375_24a3b8ef46_o.jpg', function ( texture ) {
 
-			var composer, effectSave, effectBlend, effectFXAA, effectBloom;
-			var hblur, vblur;
+				texture.mapping = THREE.UVMapping;
 
-			var config = {
-				"veyron"	: { r: 0.5,	 model: null, backCam: new THREE.Vector3( 550, 100, -1000 ) },
-				"gallardo"	: { r: 0.35, model: null, backCam: new THREE.Vector3( 550,   0, -1500 ) }
-			};
+				init( texture );
+				animate();
 
-			var flareA, flareB;
-			var sprites = [];
+			} );
 
-			var ground, groundBasic;
+			function init( texture ) {
 
-			var blur = false;
-
-			var v = 0.9, vdir = 1;
-
-			init();
-			animate();
-
-			function init() {
-
-				container = document.getElementById( 'container' );
-
-				camera = new THREE.PerspectiveCamera( 18, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 100000 );
-				camera.position.set( 3000, 0, 3000 );
-
-				cameraTarget = new THREE.Vector3();
+				camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000 );
 
 				scene = new THREE.Scene();
-				scene.background = new THREE.Color().setHSL( 0.51, 0.6, 0.6 );
-				scene.fog = new THREE.Fog( scene.background, 3000, 10000 );
-
-				createScene();
-
-				// LIGHTS
-
-				ambientLight = new THREE.AmbientLight( 0x555555 );
-				scene.add( ambientLight );
-
-				spotLight = new THREE.SpotLight( 0xffffff, 1, 0, Math.PI/2 );
-				spotLight.position.set( 0, 1800, 1500 );
-				spotLight.target.position.set( 0, 0, 0 );
-				spotLight.castShadow = true;
 
-				spotLight.shadow.camera.near = 100;
-				spotLight.shadow.camera.far = camera.far;
-				spotLight.shadow.camera.fov = 50;
+				var mesh = new THREE.Mesh( new THREE.SphereBufferGeometry( 500, 32, 16 ), new THREE.MeshBasicMaterial( { map: texture } ) );
+				mesh.geometry.scale( - 1, 1, 1 );
+				scene.add( mesh );
 
-				spotLight.shadow.bias = -0.00125;
-				spotLight.shadow.mapSize.width = SHADOW_MAP_WIDTH;
-				spotLight.shadow.mapSize.height = SHADOW_MAP_HEIGHT;
-
-				scene.add( spotLight );
-
-				// RENDERER
-
-				renderer = new THREE.WebGLRenderer();
+				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
-				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
-				container.appendChild( renderer.domElement );
-
-				// SHADOW
-
-				renderer.shadowMap.enabled = true;
-
-				// STATS
-
-				stats = new Stats();
-				container.appendChild( stats.dom );
-
-				// CUBE CAMERA
-
-				cubeCamera = new THREE.CubeCamera( 1, 100000, 128 );
-				scene.add( cubeCamera );
-
-				// MATERIALS
-
-				var cubeTexture = cubeCamera.renderTarget.texture;
-
-				mlib = {
-
-					body: [],
-
-					"Chrome": new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeTexture  } ),
-
-					"Dark chrome": new THREE.MeshLambertMaterial( { color: 0x444444, envMap: cubeTexture } ),
-
-					"Black rough": new THREE.MeshLambertMaterial( { color: 0x050505, } ),
-
-					"Dark glass": new THREE.MeshLambertMaterial( { color: 0x101020, envMap: cubeTexture, opacity: 0.5, transparent: true } ),
-					"Orange glass": new THREE.MeshLambertMaterial( { color: 0xffbb00, opacity: 0.5, transparent: true } ),
-					"Red glass": new THREE.MeshLambertMaterial( { color: 0xff0000, opacity: 0.5, transparent: true } ),
-
-					"Black metal": new THREE.MeshLambertMaterial( { color: 0x222222, envMap: cubeTexture, combine: THREE.MultiplyOperation } ),
-					"Orange metal": new THREE.MeshLambertMaterial( { color: 0xff6600, envMap: cubeTexture, combine: THREE.MultiplyOperation } )
-
-				};
-
-				mlib.body.push( [ "Orange", new THREE.MeshLambertMaterial( { color: 0x883300, envMap: cubeTexture, combine: THREE.MixOperation, reflectivity: 0.1 } ) ] );
-				mlib.body.push( [ "Blue", new THREE.MeshLambertMaterial( { color: 0x113355, envMap: cubeTexture, combine: THREE.MixOperation, reflectivity: 0.1 } ) ] );
-				mlib.body.push( [ "Red", new THREE.MeshLambertMaterial( { color: 0x660000, envMap: cubeTexture, combine: THREE.MixOperation, reflectivity: 0.1 } ) ] );
-				mlib.body.push( [ "Black", new THREE.MeshLambertMaterial( { color: 0x000000, envMap: cubeTexture, combine: THREE.MixOperation, reflectivity: 0.2 } ) ] );
-				mlib.body.push( [ "White", new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeTexture, combine: THREE.MixOperation, reflectivity: 0.2 } ) ] );
-
-				mlib.body.push( [ "Carmine", new THREE.MeshPhongMaterial( { color: 0x770000, specular: 0xffaaaa, envMap: cubeTexture, combine: THREE.MultiplyOperation } ) ] );
-				mlib.body.push( [ "Gold", new THREE.MeshPhongMaterial( { color: 0xaa9944, specular: 0xbbaa99, shininess: 50, envMap: cubeTexture, combine: THREE.MultiplyOperation } ) ] );
-				mlib.body.push( [ "Bronze", new THREE.MeshPhongMaterial( { color: 0x150505, specular: 0xee6600, shininess: 10, envMap: cubeTexture, combine: THREE.MixOperation, reflectivity: 0.2 } ) ] );
-				mlib.body.push( [ "Chrome", new THREE.MeshPhongMaterial( { color: 0xffffff, specular: 0xffffff, envMap: cubeTexture, combine: THREE.MultiplyOperation } ) ] );
-
-				// FLARES
-				var textureLoader = new THREE.TextureLoader();
-
-				flareA = textureLoader.load( "textures/lensflare/lensflare0.png" );
-				flareB = textureLoader.load( "textures/lensflare/lensflare3.png" );
-
-				// CARS - VEYRON
-
-				veyron = new THREE.Car();
-
-				veyron.modelScale = 3;
-				veyron.backWheelOffset = 2;
-
-				veyron.callback = function( object ) {
-
-					addCar( object, -300, -215, 0, 0 );
-					setMaterialsVeyron( object );
-
-					var sa = 2, sb = 5;
-
-					var params  = {
-
-						"a" : { map: flareA, color: 0xffffff, blending: THREE.AdditiveBlending },
-						"b" : { map: flareB, color: 0xffffff, blending: THREE.AdditiveBlending },
-
-						"ar" : { map: flareA, color: 0xff0000, blending: THREE.AdditiveBlending },
-						"br" : { map: flareB, color: 0xff0000, blending: THREE.AdditiveBlending }
-
-					};
-
-					var flares = [
-						// front
-						[ "a", sa, [ 47, 38, 120 ] ], [ "a", sa, [ 40, 38, 120 ] ], [ "a", sa, [ 32, 38, 122 ] ],
-						[ "b", sb, [ 47, 38, 120 ] ], [ "b", sb, [ 40, 38, 120 ] ], [ "b", sb, [ 32, 38, 122 ] ],
-						[ "a", sa, [ -47, 38, 120 ] ], [ "a", sa, [ -40, 38, 120 ] ], [ "a", sa, [ -32, 38, 122 ] ],
-						[ "b", sb, [ -47, 38, 120 ] ], [ "b", sb, [ -40, 38, 120 ] ], [ "b", sb, [ -32, 38, 122 ] ],
-						// back
-						[ "ar", sa, [ 22, 50, -123 ] ], [ "ar", sa, [ 32, 49, -123 ] ],
-						[ "br", sb, [ 22, 50, -123 ] ], [ "br", sb, [ 32, 49, -123 ] ],
-						[ "ar", sa, [ -22, 50, -123 ] ], [ "ar", sa, [ -32, 49, -123 ] ],
-						[ "br", sb, [ -22, 50, -123 ] ], [ "br", sb, [ -32, 49, -123 ] ],
-					];
-
-					for ( var i = 0; i < flares.length; i ++ ) {
-
-						var p = params[ flares[ i ][ 0 ] ];
-
-						var s = flares[ i ][ 1 ];
-
-						var x = flares[ i ][ 2 ][ 0 ];
-						var y = flares[ i ][ 2 ][ 1 ];
-						var z = flares[ i ][ 2 ][ 2 ];
-
-						var material = new THREE.SpriteMaterial( p );
-						var sprite = new THREE.Sprite( material );
-
-						var spriteWidth = 16;
-						var spriteHeight = 16;
-
-						sprite.scale.set( s * spriteWidth, s * spriteHeight, s );
-						sprite.position.set( x, y, z );
-
-						object.bodyMesh.add( sprite );
-
-						sprites.push( sprite );
-
-					}
-
-				};
-
-				veyron.loadPartsBinary( "obj/veyron/parts/veyron_body_bin.js", "obj/veyron/parts/veyron_wheel_bin.js" );
-
-				// CARS - GALLARDO
-
-				gallardo = new THREE.Car();
+				renderer.setSize( window.innerWidth, window.innerHeight );
 
-				gallardo.modelScale = 2;
-				gallardo.backWheelOffset = 45;
+				cubeCamera1 = new THREE.CubeCamera( 1, 1000, 256 );
+				cubeCamera1.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter;
+				scene.add( cubeCamera1 );
 
-				gallardo.callback = function( object ) {
+				cubeCamera2 = new THREE.CubeCamera( 1, 1000, 256 );
+				cubeCamera2.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter;
+				scene.add( cubeCamera2 );
 
-					addCar( object, 300, -110, 0, -110 );
-					setMaterialsGallardo( object );
-
-					var sa = 2, sb = 5;
-
-					var params  = {
-
-						"a" : { map: flareA, color: 0xffffff, blending: THREE.AdditiveBlending },
-						"b" : { map: flareB, color: 0xffffff, blending: THREE.AdditiveBlending },
-
-						"ar" : { map: flareA, color: 0xff0000, blending: THREE.AdditiveBlending },
-						"br" : { map: flareB, color: 0xff0000, blending: THREE.AdditiveBlending }
-
-					};
-
-					var flares = [
-						// front
-						[ "a", sa, [ 70, 10, 160 ] ], [ "a", sa, [ 66, -1, 175 ] ], [ "a", sa, [ 66, -1, 165 ] ],
-						[ "b", sb, [ 70, 10, 160 ] ], [ "b", sb, [ 66, -1, 175 ] ], [ "b", sb, [ 66, -1, 165 ] ],
-						[ "a", sa, [ -70, 10, 160 ] ], [ "a", sa, [ -66, -1, 175 ] ], [ "a", sa, [ -66, -1, 165 ] ],
-						[ "b", sb, [ -70, 10, 160 ] ], [ "b", sb, [ -66, -1, 175 ] ], [ "b", sb, [ -66, -1, 165 ] ],
-						// back
-						[ "ar", sa, [ 61, 19, -185 ] ], [ "ar", sa, [ 55, 19, -185 ] ],
-						[ "br", sb, [ 61, 19, -185 ] ], [ "br", sb, [ 55, 19, -185 ] ],
-						[ "ar", sa, [ -61, 19, -185 ] ], [ "ar", sa, [ -55, 19, -185 ] ],
-						[ "br", sb, [ -61, 19, -185 ] ], [ "br", sb, [ -55, 19, -185 ] ],
-					];
-
-
-					for ( var i = 0; i < flares.length; i ++ ) {
-
-						var p = params[ flares[ i ][ 0 ] ];
-
-						var s = flares[ i ][ 1 ];
-
-						var x = flares[ i ][ 2 ][ 0 ];
-						var y = flares[ i ][ 2 ][ 1 ];
-						var z = flares[ i ][ 2 ][ 2 ];
-
-						var material = new THREE.SpriteMaterial( p );
-						var sprite = new THREE.Sprite( material );
-
-						var spriteWidth = 16;
-						var spriteHeight = 16;
-
-						sprite.scale.set( s * spriteWidth, s * spriteHeight, s );
-						sprite.position.set( x, y, z );
-
-						object.bodyMesh.add( sprite );
-
-						sprites.push( sprite );
-
-					}
-
-				};
-
-				gallardo.loadPartsBinary( "obj/gallardo/parts/gallardo_body_bin.js", "obj/gallardo/parts/gallardo_wheel_bin.js" );
+				document.body.appendChild( renderer.domElement );
 
 				//
 
-				config[ "gallardo" ].model = gallardo;
-				config[ "veyron" ].model = veyron;
-
-				currentCar = gallardo;
-
-				// EVENTS
-
-				document.addEventListener( 'keydown', onKeyDown, false );
-				document.addEventListener( 'keyup', onKeyUp, false );
-
-				window.addEventListener( 'resize', onWindowResize, false );
-
-				// POSTPROCESSING
-
-				renderer.autoClear = false;
-
-				var renderTargetParameters = {
-					minFilter: THREE.LinearFilter,
-					magFilter: THREE.LinearFilter,
-					format: THREE.RGBFormat,
-					stencilBuffer: false
-				};
-				renderTarget = new THREE.WebGLRenderTarget( SCREEN_WIDTH, SCREEN_HEIGHT, renderTargetParameters );
-
-				effectSave = new THREE.SavePass( new THREE.WebGLRenderTarget( SCREEN_WIDTH, SCREEN_HEIGHT, renderTargetParameters ) );
-
-				effectBlend = new THREE.ShaderPass( THREE.BlendShader, "tDiffuse1" );
-
-				effectFXAA = new THREE.ShaderPass( THREE.FXAAShader );
-				var effectVignette = new THREE.ShaderPass( THREE.VignetteShader );
-				var effectBleach = new THREE.ShaderPass( THREE.BleachBypassShader );
-				effectBloom = new THREE.BloomPass( 0.75 );
-
-				effectFXAA.uniforms[ 'resolution' ].value.set( 1 / SCREEN_WIDTH, 1 / SCREEN_HEIGHT );
-
-				// tilt shift
-
-				hblur = new THREE.ShaderPass( THREE.HorizontalTiltShiftShader );
-				vblur = new THREE.ShaderPass( THREE.VerticalTiltShiftShader );
-
-				var bluriness = 7;
-
-				hblur.uniforms[ 'h' ].value = bluriness / SCREEN_WIDTH;
-				vblur.uniforms[ 'v' ].value = bluriness / SCREEN_HEIGHT;
-
-				if ( FOLLOW_CAMERA ) {
-
-					if ( currentCar == gallardo ) {
-
-						hblur.uniforms[ 'r' ].value = vblur.uniforms[ 'r' ].value = rMap[ "gallardo" ];
-
-					} else if ( currentCar == veyron ) {
-
-						hblur.uniforms[ 'r' ].value = vblur.uniforms[ 'r' ].value = rMap[ "veyron" ];
-
-					}
-
-				} else {
-
-					hblur.uniforms[ 'r' ].value = vblur.uniforms[ 'r' ].value = 0.35;
-
-				}
-
-				effectVignette.uniforms[ "offset" ].value = 1.05;
-				effectVignette.uniforms[ "darkness" ].value = 1.5;
-
-				// motion blur
-
-				effectBlend.uniforms[ 'tDiffuse2' ].value = effectSave.renderTarget.texture;
-				effectBlend.uniforms[ 'mixRatio' ].value = 0.65;
-
-				var renderModel = new THREE.RenderPass( scene, camera );
-
-				effectVignette.renderToScreen = true;
-
-				composer = new THREE.EffectComposer( renderer, renderTarget );
-
-				composer.addPass( renderModel );
-
-				composer.addPass( effectFXAA );
-
-				composer.addPass( effectBlend );
-				composer.addPass( effectSave );
-
-				composer.addPass( effectBloom );
-				composer.addPass( effectBleach );
-
-				composer.addPass( hblur );
-				composer.addPass( vblur );
-
-				composer.addPass( effectVignette );
-
-			}
-
-			//
-
-			function setSpritesOpacity( opacity ) {
-
-				for ( var i = 0; i < sprites.length; i ++ ) {
-
-					sprites[ i ].material.opacity = opacity;
-
-				}
-
-			}
-
-			//
-
-
-			function createScene() {
-
-				// GROUND
-
-				var texture = new THREE.TextureLoader().load( "textures/cube/Park3Med/ny.jpg" );
-				texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
-				texture.repeat.set( 50, 50 );
-
-				groundBasic = new THREE.MeshBasicMaterial( { color: 0xffffff, map: texture } );
-				groundBasic.color.setHSL( 0.1, 0.9, 0.7 );
-
-				ground = new THREE.Mesh( new THREE.PlaneBufferGeometry( 50000, 50000 ), groundBasic );
-				ground.position.y = - 215;
-				ground.rotation.x = - Math.PI / 2;
-				scene.add( ground );
-
-				ground.castShadow = false;
-				ground.receiveShadow = true;
-
-				// OBJECTS
-
-				var cylinderGeometry = new THREE.CylinderBufferGeometry( 2, 50, 1000, 32 );
-				var sphereGeometry = new THREE.SphereBufferGeometry( 100, 32, 16 );
-
-				var sy1 = -500 + 38;
-				var sy2 = -88;
-
-				//
-
-				var canvas = document.createElement( 'canvas' );
-				canvas.width = 128;
-				canvas.height = 128;
-
-				var context = canvas.getContext( '2d' );
-				var gradient = context.createRadialGradient( canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2 );
-				gradient.addColorStop( 0.1, 'rgba(0,0,0,1)' );
-				gradient.addColorStop( 1, 'rgba(0,0,0,0)' );
-
-				context.fillStyle = gradient;
-				context.fillRect( 0, 0, canvas.width, canvas.height );
-
-				//
-
-				var shadowTexture = new THREE.CanvasTexture( canvas );
-
-				var shadowPlane = new THREE.PlaneBufferGeometry( 400, 400 );
-				var shadowMaterial = new THREE.MeshBasicMaterial( {
-
-					opacity: 0.35, transparent: true, map: shadowTexture,
-					polygonOffset: false, polygonOffsetFactor: -0.5, polygonOffsetUnits: 1
-
-				} );
-
-				//
-
-				addObject( cylinderGeometry, 0xff0000, 1500, 250, 0, sy1, shadowPlane, shadowMaterial );
-				addObject( cylinderGeometry, 0xffaa00, -1500, 250, 0, sy1, shadowPlane, shadowMaterial );
-				addObject( cylinderGeometry, 0x00ff00, 0, 250, 1500, sy1, shadowPlane, shadowMaterial );
-				addObject( cylinderGeometry, 0x00ffaa, 0, 250, -1500, sy1, shadowPlane, shadowMaterial );
-
-				addObject( sphereGeometry, 0xff0000, 1500, -125, 200, sy2, shadowPlane, shadowMaterial );
-				addObject( sphereGeometry, 0xffaa00, -1500, -125, 200, sy2, shadowPlane, shadowMaterial );
-				addObject( sphereGeometry, 0x00ff00, 200, -125, 1500, sy2, shadowPlane, shadowMaterial );
-				addObject( sphereGeometry, 0x00ffaa, 200, -125, -1500, sy2, shadowPlane, shadowMaterial );
-
-			}
-
-			function addObject( geometry, color, x, y, z, sy, shadowPlane, shadowMaterial ) {
-
-				var object = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: color } ) );
-				object.position.set( x, y, z );
-				object.castShadow = true;
-				object.receiveShadow = true;
-				scene.add( object );
-
-				var shadow = new THREE.Mesh( shadowPlane, shadowMaterial );
-				shadow.position.y = sy;
-				shadow.rotation.x = - Math.PI / 2;
-				object.add( shadow );
-
-			}
-
-			//
-
-			function generateDropShadowTexture( object, width, height, bluriness ) {
-
-				var renderTargetParameters = {
-					minFilter: THREE.LinearMipmapLinearFilter,
-					magFilter: THREE.LinearFilter,
-					format: THREE.RGBAFormat,
-					stencilBuffer: false
-				};
-				var shadowTarget = new THREE.WebGLRenderTarget( width, height, renderTargetParameters );
-
-				var shadowMaterial = new THREE.MeshBasicMaterial( { color: 0x000000 } );
-				var shadowGeometry = object.geometry.clone();
-
-				var shadowObject = new THREE.Mesh( shadowGeometry, shadowMaterial );
-
-				var shadowScene = new THREE.Scene();
-				shadowScene.add( shadowObject );
-
-				shadowObject.geometry.computeBoundingBox();
-
-				var bb = shadowObject.geometry.boundingBox;
-
-				var dimensions = new THREE.Vector3();
-				dimensions.subVectors( bb.max, bb.min );
-
-				var margin = 0.15,
-
-				width  = dimensions.z,
-				height = dimensions.x,
-				depth  = dimensions.y,
-
-				left   = bb.min.z - margin * width,
-				right  = bb.max.z + margin * width,
-
-				top    = bb.max.x + margin * height,
-				bottom = bb.min.x - margin * height,
-
-				near = bb.max.y + margin * depth,
-				far  = bb.min.y - margin * depth;
-
-				var topCamera = new THREE.OrthographicCamera( left, right, top, bottom, near, far );
-				topCamera.position.y = bb.max.y;
-				topCamera.lookAt( shadowScene.position );
-
-				shadowScene.add( topCamera );
-
-				var renderShadow = new THREE.RenderPass( shadowScene, topCamera );
-
-				var blurShader = THREE.TriangleBlurShader;
-				var effectBlurX = new THREE.ShaderPass( blurShader, 'texture' );
-				var effectBlurY = new THREE.ShaderPass( blurShader, 'texture' );
-
-				renderShadow.clearColor = new THREE.Color( 0x000000 );
-				renderShadow.clearAlpha = 0;
-
-				var blurAmountX = bluriness / width;
-				var blurAmountY = bluriness / height;
-
-				effectBlurX.uniforms[ 'delta' ].value = new THREE.Vector2( blurAmountX, 0 );
-				effectBlurY.uniforms[ 'delta' ].value = new THREE.Vector2( 0, blurAmountY );
-
-				var shadowComposer = new THREE.EffectComposer( renderer, shadowTarget );
-
-				shadowComposer.addPass( renderShadow );
-				shadowComposer.addPass( effectBlurX );
-				shadowComposer.addPass( effectBlurY );
-
-				renderer.clear();
-				shadowComposer.render( 0.1 );
-
-				return shadowTarget;
-
-			}
-
-			//
-
-			function addCar( object, x, y, z, s ) {
-
-				object.root.position.set( x, y, z );
-				scene.add( object.root );
-
-				object.enableShadows( true );
-
-				if ( FOLLOW_CAMERA && object == currentCar ) {
-
-					object.root.add( camera );
-
-					camera.position.set( 350, 500, 2200 );
-					//camera.position.set( 0, 3000, -500 );
-
-					cameraTarget.z = 500;
-					cameraTarget.y = 150;
-
-					camera.lookAt( cameraTarget );
-
-				}
-
-				var shadowTexture = generateDropShadowTexture( object.bodyMesh, 64, 32, 15 );
-
-				object.bodyMesh.geometry.computeBoundingBox();
-				var bb = object.bodyMesh.geometry.boundingBox;
-
-				var ss = object.modelScale * 1.1;
-				var shadowWidth  =        ss * ( bb.max.z - bb.min.z );
-				var shadowHeight = 1.25 * ss * ( bb.max.x - bb.min.x );
-
-				var shadowPlane = new THREE.PlaneBufferGeometry( shadowWidth, shadowHeight );
-				var shadowMaterial = new THREE.MeshBasicMaterial( {
-					color: 0xffffff, opacity: 0.5, transparent: true, map: shadowTexture.texture,
-					polygonOffset: false, polygonOffsetFactor: -0.5, polygonOffsetUnits: 1
+				material = new THREE.MeshBasicMaterial( {
+					envMap: cubeCamera2.renderTarget.texture
 				} );
 
-				var shadow = new THREE.Mesh( shadowPlane, shadowMaterial );
-				shadow.position.y = s + 10;
-				shadow.rotation.x = - Math.PI / 2;
-				shadow.rotation.z = Math.PI / 2;
-
-				object.root.add( shadow );
-
-			}
-
-			//
-
-			function setCurrentCar( car, cameraType ) {
-
-				var oldCar = currentCar;
-
-				currentCar = config[ car ].model;
-
-				if ( cameraType == "front" || cameraType == "back" ) {
-
-					hblur.uniforms[ 'r' ].value = vblur.uniforms[ 'r' ].value = config[ car ].r;
-
-					FOLLOW_CAMERA = true;
-
-					oldCar.root.remove( camera );
-					currentCar.root.add( camera );
-
-					if ( cameraType == "front" ) {
-
-						camera.position.set( 350, 500, 2200 );
+				sphere = new THREE.Mesh( new THREE.IcosahedronBufferGeometry( 20, 3 ), material );
+				scene.add( sphere );
 
-					} else if ( cameraType == "back" ) {
+				cube = new THREE.Mesh( new THREE.BoxBufferGeometry( 20, 20, 20 ), material );
+				scene.add( cube );
 
-						camera.position.copy( config[ car ].backCam );
+				torus = new THREE.Mesh( new THREE.TorusKnotBufferGeometry( 10, 5, 100, 25 ), material );
+				scene.add( torus );
 
-					}
-
-					cameraTarget.set( 0, 150, 500 );
-
-				} else {
-
-					FOLLOW_CAMERA = false;
-
-					oldCar.root.remove( camera );
-
-					camera.position.set( 2000, 0, 2000 );
-					cameraTarget.set( 0, 0, 0 );
+				//
 
-					spotLight.position.set( 0, 1800, 1500 );
+				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
+				document.addEventListener( 'wheel', onDocumentMouseWheel, false );
 
-					hblur.uniforms[ 'r' ].value = vblur.uniforms[ 'r' ].value = 0.35;
-
-				}
+				window.addEventListener( 'resize', onWindowResized, false );
 
 			}
 
-			//
-
-			function onWindowResize( event ) {
+			function onWindowResized( event ) {
 
-				SCREEN_WIDTH = window.innerWidth;
-				SCREEN_HEIGHT = window.innerHeight;
+				renderer.setSize( window.innerWidth, window.innerHeight );
 
-				camera.aspect = SCREEN_WIDTH / SCREEN_HEIGHT;
+				camera.aspect = window.innerWidth / window.innerHeight;
 				camera.updateProjectionMatrix();
 
-				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
-				composer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
-
-				hblur.uniforms[ 'h' ].value = 10.75 / SCREEN_WIDTH;
-				vblur.uniforms[ 'v' ].value = 10.75 / SCREEN_HEIGHT;
-
-				effectFXAA.uniforms[ 'resolution' ].value.set( 1 / SCREEN_WIDTH, 1 / SCREEN_HEIGHT );
-
 			}
 
-			//
-
-			function onKeyDown ( event ) {
-
-				switch( event.keyCode ) {
+			function onDocumentMouseDown( event ) {
 
-					case 38: /*up*/	controlsGallardo.moveForward = true; break;
-					case 87: /*W*/ 	controlsVeyron.moveForward = true; break;
+				event.preventDefault();
 
-					case 40: /*down*/controlsGallardo.moveBackward = true; break;
-					case 83: /*S*/ 	 controlsVeyron.moveBackward = true; break;
+				onPointerDownPointerX = event.clientX;
+				onPointerDownPointerY = event.clientY;
 
-					case 37: /*left*/controlsGallardo.moveLeft = true; break;
-					case 65: /*A*/   controlsVeyron.moveLeft = true; break;
+				onPointerDownLon = lon;
+				onPointerDownLat = lat;
 
-					case 39: /*right*/controlsGallardo.moveRight = true; break;
-					case 68: /*D*/    controlsVeyron.moveRight = true; break;
-
-					case 49: /*1*/	setCurrentCar( "gallardo", "center" ); break;
-					case 50: /*2*/	setCurrentCar( "veyron", "center" ); break;
-					case 51: /*3*/	setCurrentCar( "gallardo", "front" ); break;
-					case 52: /*4*/	setCurrentCar( "veyron", "front" ); break;
-					case 53: /*5*/	setCurrentCar( "gallardo", "back" ); break;
-					case 54: /*6*/	setCurrentCar( "veyron", "back" ); break;
-
-					case 78: /*N*/   vdir *= -1; break;
-
-					case 66: /*B*/   blur = !blur; break;
-
-				}
+				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.addEventListener( 'mouseup', onDocumentMouseUp, false );
 
 			}
 
-			function onKeyUp ( event ) {
+			function onDocumentMouseMove( event ) {
 
-				switch( event.keyCode ) {
-
-					case 38: /*up*/controlsGallardo.moveForward = false; break;
-					case 87: /*W*/ controlsVeyron.moveForward = false; break;
-
-					case 40: /*down*/controlsGallardo.moveBackward = false; break;
-					case 83: /*S*/ 	 controlsVeyron.moveBackward = false; break;
-
-					case 37: /*left*/controlsGallardo.moveLeft = false; break;
-					case 65: /*A*/ 	 controlsVeyron.moveLeft = false; break;
-
-					case 39: /*right*/controlsGallardo.moveRight = false; break;
-					case 68: /*D*/ 	  controlsVeyron.moveRight = false; break;
-
-				}
+				lon = ( event.clientX - onPointerDownPointerX ) * 0.1 + onPointerDownLon;
+				lat = ( event.clientY - onPointerDownPointerY ) * 0.1 + onPointerDownLat;
 
 			}
 
+			function onDocumentMouseUp( event ) {
 
-			//
-
-			function setMaterialsGallardo( car ) {
-
-				// BODY
-
-				var materials = car.bodyMaterials;
-
-				materials[ 0 ] = mlib.body[ 0 ][ 1 ]; 		// body
-				materials[ 1 ] = mlib[ "Dark chrome" ]; 	// front under lights, back
-
-				// WHEELS
-
-				materials = car.wheelMaterials;
-
-				materials[ 0 ] = mlib[ "Chrome" ];			// insides
-				materials[ 1 ] = mlib[ "Black rough" ];	// tire
+				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
 
 			}
 
-			function setMaterialsVeyron( car ) {
-
-				// 0 - top, front center, back sides
-				// 1 - front sides
-				// 2 - engine
-				// 3 - small chrome things
-				// 4 - backlights
-				// 5 - back signals
-				// 6 - bottom, interior
-				// 7 - windshield
-
-				// BODY
+			function onDocumentMouseWheel( event ) {
 
-				var materials = car.bodyMaterials;
+				var fov = camera.fov + event.deltaY * 0.05;
 
-				materials[ 0 ] = mlib[ "Black metal" ];	// top, front center, back sides
-				materials[ 1 ] = mlib[ "Chrome" ];			// front sides
-				materials[ 2 ] = mlib[ "Chrome" ];			// engine
-				materials[ 3 ] = mlib[ "Dark chrome" ];	// small chrome things
-				materials[ 4 ] = mlib[ "Red glass" ];		// backlights
-				materials[ 5 ] = mlib[ "Orange glass" ];	// back signals
-				materials[ 6 ] = mlib[ "Black rough" ];	// bottom, interior
-				materials[ 7 ] = mlib[ "Dark glass" ];		// windshield
+				camera.fov = THREE.Math.clamp( fov, 10, 75 );
 
-				// WHEELS
-
-				materials = car.wheelMaterials;
-
-				materials[ 0 ] = mlib[ "Chrome" ];			// insides
-				materials[ 1 ] = mlib[ "Black rough" ];	// tire
+				camera.updateProjectionMatrix();
 
 			}
 
-			//
-
 			function animate() {
 
 				requestAnimationFrame( animate );
-
 				render();
-				stats.update();
 
 			}
 
 			function render() {
 
-				var delta = clock.getDelta();
-
-				// day / night
-
-				v = THREE.Math.clamp( v + 0.5 * delta * vdir, 0.1, 0.9 );
-				scene.background.setHSL( 0.51, 0.5, v * 0.75 );
-				scene.fog.color.setHSL( 0.51, 0.5, v * 0.75 );
-
-				var vnorm = ( v - 0.05 ) / ( 0.9 - 0.05 );
-
-				if ( vnorm < 0.3 ) {
-
-					setSpritesOpacity( 1 - v / 0.3 );
-
-				} else {
-
-					setSpritesOpacity( 0 );
-
-				}
-
-				if ( veyron.loaded ) {
-
-					veyron.bodyMaterials[ 1 ] = mlib[ "Chrome" ];
-					veyron.bodyMaterials[ 2 ] = mlib[ "Chrome" ];
-
-					veyron.wheelMaterials[ 0 ] = mlib[ "Chrome" ];
-
-				}
-
-				if ( gallardo.loaded ) {
-
-					gallardo.wheelMaterials[ 0 ] = mlib[ "Chrome" ];
-
-				}
+				var time = Date.now();
 
-				effectBloom.copyUniforms[ "opacity" ].value = THREE.Math.mapLinear( vnorm, 0, 1, 1, 0.75 );
+				lon += .15;
 
-				ambientLight.color.setHSL( 0, 0, THREE.Math.mapLinear( vnorm, 0, 1, 0.1, 0.3 ) );
-				groundBasic.color.setHSL( 0.1, 0.5, THREE.Math.mapLinear( vnorm, 0, 1, 0.4, 0.65 ) );
+				lat = Math.max( - 85, Math.min( 85, lat ) );
+				phi = THREE.Math.degToRad( 90 - lat );
+				theta = THREE.Math.degToRad( lon );
 
-				// blur
+				cube.position.x = Math.cos( time * 0.001 ) * 30;
+				cube.position.y = Math.sin( time * 0.001 ) * 30;
+				cube.position.z = Math.sin( time * 0.001 ) * 30;
 
-				if ( blur ) {
+				cube.rotation.x += 0.02;
+				cube.rotation.y += 0.03;
 
-					effectSave.enabled = true;
-					effectBlend.enabled = true;
+				torus.position.x = Math.cos( time * 0.001 + 10 ) * 30;
+				torus.position.y = Math.sin( time * 0.001 + 10 ) * 30;
+				torus.position.z = Math.sin( time * 0.001 + 10 ) * 30;
 
-				} else {
+				torus.rotation.x += 0.02;
+				torus.rotation.y += 0.03;
 
-					effectSave.enabled = false;
-					effectBlend.enabled = false;
+				camera.position.x = 100 * Math.sin( phi ) * Math.cos( theta );
+				camera.position.y = 100 * Math.cos( phi );
+				camera.position.z = 100 * Math.sin( phi ) * Math.sin( theta );
 
-				}
+				camera.lookAt( scene.position );
 
-				// update car model
+				sphere.visible = false;
 
-				veyron.updateCarModel( delta, controlsVeyron );
-				gallardo.updateCarModel( delta, controlsGallardo );
+				// pingpong
 
-				// update camera
+				if ( count % 2 === 0 ) {
 
-				if ( ! FOLLOW_CAMERA ) {
-
-					cameraTarget.x = currentCar.root.position.x;
-					cameraTarget.z = currentCar.root.position.z;
+					material.envMap = cubeCamera1.renderTarget.texture;
+					cubeCamera2.update( renderer, scene );
 
 				} else {
 
-					spotLight.position.x = currentCar.root.position.x - 500;
-					spotLight.position.z = currentCar.root.position.z - 500;
-
+					material.envMap = cubeCamera2.renderTarget.texture;
+					cubeCamera1.update( renderer, scene );
 
 				}
 
-				// update shadows
-
-				spotLight.target.position.x = currentCar.root.position.x;
-				spotLight.target.position.z = currentCar.root.position.z;
-
-				// render cube map
-
-				var updateCubemap = true;
-
-				if ( updateCubemap ) {
-
-					veyron.setVisible( false );
-					gallardo.setVisible( false );
-
-					cubeCamera.position.copy( currentCar.root.position );
-
-					renderer.autoClear = true;
-					cubeCamera.update( renderer, scene );
-
-					veyron.setVisible( true );
-					gallardo.setVisible( true );
-
-				}
-
-				// render scene
-
-				renderer.autoClear = false;
-				renderer.shadowMap.enabled = true;
-
-				camera.lookAt( cameraTarget );
-
-				renderer.setRenderTarget( null );
+				count ++;
 
-				renderer.clear();
-				composer.render( 0.1 );
+				sphere.visible = true;
 
-				renderer.shadowMap.enabled = false;
+				renderer.render( scene, camera );
 
 			}
 

+ 0 - 217
examples/webgl_materials_cubemap_dynamic2.html

@@ -1,217 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-	<head>
-		<title>three.js webgl - materials - dynamic cube reflection</title>
-		<meta charset="utf-8">
-		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
-		<style>
-			body {
-				background-color: #000000;
-				margin: 0px;
-				overflow: hidden;
-			}
-
-			#info {
-				position: absolute;
-				top: 0px; width: 100%;
-				color: #ffffff;
-				padding: 5px;
-				font-family:Monospace;
-				font-size:13px;
-				font-weight: bold;
-				text-align:center;
-			}
-
-			a {
-				color: #ffffff;
-			}
-		</style>
-	</head>
-	<body>
-
-		<div id="info"><a href="http://threejs.org" target="_blank" rel="noopener">three.js webgl</a> - materials - dynamic cube reflection<br/>Photo by <a href="http://www.flickr.com/photos/jonragnarsson/2294472375/" target="_blank" rel="noopener">J&oacute;n Ragnarsson</a>.</div>
-
-		<script src="../build/three.js"></script>
-
-		<script>
-
-			var camera, scene, renderer;
-			var cube, sphere, torus, material;
-
-			var count = 0, cubeCamera1, cubeCamera2;
-
-			var lon = 0, lat = 0;
-			var phi = 0, theta = 0;
-
-			var textureLoader = new THREE.TextureLoader();
-
-			textureLoader.load( 'textures/2294472375_24a3b8ef46_o.jpg', function ( texture ) {
-
-				texture.mapping = THREE.UVMapping;
-
-				init( texture );
-				animate();
-
-			} );
-
-			function init( texture ) {
-
-				camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000 );
-
-				scene = new THREE.Scene();
-
-				var mesh = new THREE.Mesh( new THREE.SphereBufferGeometry( 500, 32, 16 ), new THREE.MeshBasicMaterial( { map: texture } ) );
-				mesh.geometry.scale( - 1, 1, 1 );
-				scene.add( mesh );
-
-				renderer = new THREE.WebGLRenderer( { antialias: true } );
-				renderer.setPixelRatio( window.devicePixelRatio );
-				renderer.setSize( window.innerWidth, window.innerHeight );
-
-				cubeCamera1 = new THREE.CubeCamera( 1, 1000, 256 );
-				cubeCamera1.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter;
-				scene.add( cubeCamera1 );
-
-				cubeCamera2 = new THREE.CubeCamera( 1, 1000, 256 );
-				cubeCamera2.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter;
-				scene.add( cubeCamera2 );
-
-				document.body.appendChild( renderer.domElement );
-
-				//
-
-				material = new THREE.MeshBasicMaterial( {
-					envMap: cubeCamera2.renderTarget.texture
-				} );
-
-				sphere = new THREE.Mesh( new THREE.IcosahedronBufferGeometry( 20, 3 ), material );
-				scene.add( sphere );
-
-				cube = new THREE.Mesh( new THREE.BoxBufferGeometry( 20, 20, 20 ), material );
-				scene.add( cube );
-
-				torus = new THREE.Mesh( new THREE.TorusKnotBufferGeometry( 10, 5, 100, 25 ), material );
-				scene.add( torus );
-
-				//
-
-				document.addEventListener( 'mousedown', onDocumentMouseDown, false );
-				document.addEventListener( 'wheel', onDocumentMouseWheel, false );
-
-				window.addEventListener( 'resize', onWindowResized, false );
-
-			}
-
-			function onWindowResized( event ) {
-
-				renderer.setSize( window.innerWidth, window.innerHeight );
-
-				camera.aspect = window.innerWidth / window.innerHeight;
-				camera.updateProjectionMatrix();
-
-			}
-
-			function onDocumentMouseDown( event ) {
-
-				event.preventDefault();
-
-				onPointerDownPointerX = event.clientX;
-				onPointerDownPointerY = event.clientY;
-
-				onPointerDownLon = lon;
-				onPointerDownLat = lat;
-
-				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
-				document.addEventListener( 'mouseup', onDocumentMouseUp, false );
-
-			}
-
-			function onDocumentMouseMove( event ) {
-
-				lon = ( event.clientX - onPointerDownPointerX ) * 0.1 + onPointerDownLon;
-				lat = ( event.clientY - onPointerDownPointerY ) * 0.1 + onPointerDownLat;
-
-			}
-
-			function onDocumentMouseUp( event ) {
-
-				document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
-				document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
-
-			}
-
-			function onDocumentMouseWheel( event ) {
-
-				var fov = camera.fov + event.deltaY * 0.05;
-
-				camera.fov = THREE.Math.clamp( fov, 10, 75 );
-
-				camera.updateProjectionMatrix();
-
-			}
-
-			function animate() {
-
-				requestAnimationFrame( animate );
-				render();
-
-			}
-
-			function render() {
-
-				var time = Date.now();
-
-				lon += .15;
-
-				lat = Math.max( - 85, Math.min( 85, lat ) );
-				phi = THREE.Math.degToRad( 90 - lat );
-				theta = THREE.Math.degToRad( lon );
-
-				cube.position.x = Math.cos( time * 0.001 ) * 30;
-				cube.position.y = Math.sin( time * 0.001 ) * 30;
-				cube.position.z = Math.sin( time * 0.001 ) * 30;
-
-				cube.rotation.x += 0.02;
-				cube.rotation.y += 0.03;
-
-				torus.position.x = Math.cos( time * 0.001 + 10 ) * 30;
-				torus.position.y = Math.sin( time * 0.001 + 10 ) * 30;
-				torus.position.z = Math.sin( time * 0.001 + 10 ) * 30;
-
-				torus.rotation.x += 0.02;
-				torus.rotation.y += 0.03;
-
-				camera.position.x = 100 * Math.sin( phi ) * Math.cos( theta );
-				camera.position.y = 100 * Math.cos( phi );
-				camera.position.z = 100 * Math.sin( phi ) * Math.sin( theta );
-
-				camera.lookAt( scene.position );
-
-				sphere.visible = false;
-
-				// pingpong
-
-				if ( count % 2 === 0 ) {
-
-					material.envMap = cubeCamera1.renderTarget.texture;
-					cubeCamera2.update( renderer, scene );
-
-				} else {
-
-					material.envMap = cubeCamera2.renderTarget.texture;
-					cubeCamera1.update( renderer, scene );
-
-				}
-
-				count ++;
-
-				sphere.visible = true;
-
-				renderer.render( scene, camera );
-
-			}
-
-		</script>
-
-	</body>
-</html>