webgl_sandbox.html 12.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
<!DOCTYPE HTML>
<html lang="en">
	<head>
		<title>three.js - webgl</title>
		<meta charset="utf-8">
		<style type="text/css">
			body {
				background:#fff;
				padding:0;
				margin:0;
				font-weight: bold;
				overflow:hidden;
			}

			#info {
				position: absolute;
				top: 0px; width: 100%;
				color: #ffffff;
				padding: 5px;
				font-family:Monospace;
				font-size:13px;
				text-align:center;
23
				z-index:1000;
24 25 26 27 28
			}

			a {
				color: #ffffff;
			}
M
Mr.doob 已提交
29

30 31 32 33 34 35
		</style>
	</head>

	<body>
		<div id="info"><a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> - webgl cube Fresnel shader demo.</div>

M
Mr.doob 已提交
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
		<!-- <script src="../build/Three.js"></script> -->

		<script src="../src/Three.js"></script>
		<script src="../src/core/Color.js"></script>
		<script src="../src/core/Vector2.js"></script>
		<script src="../src/core/Vector3.js"></script>
		<script src="../src/core/Vector4.js"></script>
		<script src="../src/core/Ray.js"></script>
		<script src="../src/core/Rectangle.js"></script>
		<script src="../src/core/Matrix3.js"></script>
		<script src="../src/core/Matrix4.js"></script>
		<script src="../src/core/Object3D.js"></script>
		<script src="../src/core/Projector.js"></script>
		<script src="../src/core/Quaternion.js"></script>
		<script src="../src/core/Vertex.js"></script>
		<script src="../src/core/Face3.js"></script>
		<script src="../src/core/Face4.js"></script>
		<script src="../src/core/UV.js"></script>
		<script src="../src/core/Geometry.js"></script>
		<script src="../src/core/Spline.js"></script>
		<script src="../src/core/Edge.js"></script>
		<script src="../src/cameras/Camera.js"></script>
		<script src="../src/cameras/OrthoCamera.js"></script>
		<script src="../src/lights/Light.js"></script>
		<script src="../src/lights/AmbientLight.js"></script>
		<script src="../src/lights/DirectionalLight.js"></script>
		<script src="../src/lights/PointLight.js"></script>
		<script src="../src/lights/SpotLight.js"></script>
		<script src="../src/materials/Material.js"></script>
		<script src="../src/materials/LineBasicMaterial.js"></script>
		<script src="../src/materials/MeshBasicMaterial.js"></script>
		<script src="../src/materials/MeshLambertMaterial.js"></script>
		<script src="../src/materials/MeshPhongMaterial.js"></script>
		<script src="../src/materials/MeshDepthMaterial.js"></script>
		<script src="../src/materials/MeshNormalMaterial.js"></script>
		<script src="../src/materials/MeshFaceMaterial.js"></script>
		<script src="../src/materials/ShaderMaterial.js"></script>
		<script src="../src/materials/ParticleBasicMaterial.js"></script>
		<script src="../src/materials/ParticleCanvasMaterial.js"></script>
		<script src="../src/materials/ParticleDOMMaterial.js"></script>
		<script src="../src/textures/Texture.js"></script>
		<script src="../src/textures/DataTexture.js"></script>
		<script src="../src/objects/Particle.js"></script>
		<script src="../src/objects/ParticleSystem.js"></script>
		<script src="../src/objects/Line.js"></script>
		<script src="../src/objects/Mesh.js"></script>
		<script src="../src/objects/Bone.js"></script>
		<script src="../src/objects/SkinnedMesh.js"></script>
		<script src="../src/objects/Ribbon.js"></script>
		<script src="../src/objects/LOD.js"></script>
		<script src="../src/objects/Sprite.js"></script>
		<script src="../src/scenes/Scene.js"></script>
		<script src="../src/scenes/Fog.js"></script>
		<script src="../src/scenes/FogExp2.js"></script>
		<script src="../src/renderers/DOMRenderer.js"></script>
		<script src="../src/renderers/CanvasRenderer.js"></script>
		<script src="../src/renderers/SVGRenderer.js"></script>
		<script src="../src/renderers/WebGLShaders.js"></script>
		<script src="../src/renderers/WebGLRenderer.js"></script>
		<script src="../src/renderers/WebGLRenderTarget.js"></script>
		<script src="../src/renderers/WebGLRenderTargetCube.js"></script>
		<script src="../src/renderers/renderables/RenderableVertex.js"></script>
		<script src="../src/renderers/renderables/RenderableFace3.js"></script>
		<script src="../src/renderers/renderables/RenderableFace4.js"></script>
		<script src="../src/renderers/renderables/RenderableObject.js"></script>
		<script src="../src/renderers/renderables/RenderableParticle.js"></script>
		<script src="../src/renderers/renderables/RenderableLine.js"></script>
		<script src="../src/extras/ColorUtils.js"></script>
		<script src="../src/extras/GeometryUtils.js"></script>
		<script src="../src/extras/ImageUtils.js"></script>
		<script src="../src/extras/SceneUtils.js"></script>
		<script src="../src/extras/ShaderUtils.js"></script>
		<script src="../src/extras/core/Curve.js"></script>
		<script src="../src/extras/core/CurvePath.js"></script>
		<script src="../src/extras/core/Path.js"></script>
		<script src="../src/extras/core/Shape.js"></script>
		<script src="../src/extras/core/TextPath.js"></script>
		<script src="../src/extras/animation/AnimationHandler.js"></script>
		<script src="../src/extras/animation/Animation.js"></script>
		<script src="../src/extras/cameras/FirstPersonCamera.js"></script>
		<script src="../src/extras/cameras/PathCamera.js"></script>
		<script src="../src/extras/cameras/FlyCamera.js"></script>
		<script src="../src/extras/cameras/RollCamera.js"></script>
		<script src="../src/extras/cameras/TrackballCamera.js"></script>
		<script src="../src/extras/cameras/QuakeCamera.js"></script>
		<script src="../src/extras/geometries/CubeGeometry.js"></script>
		<script src="../src/extras/geometries/CylinderGeometry.js"></script>
		<script src="../src/extras/geometries/ExtrudeGeometry.js"></script>
		<script src="../src/extras/geometries/IcosahedronGeometry.js"></script>
		<script src="../src/extras/geometries/LatheGeometry.js"></script>
		<script src="../src/extras/geometries/PlaneGeometry.js"></script>
		<script src="../src/extras/geometries/SphereGeometry.js"></script>
		<script src="../src/extras/geometries/TextGeometry.js"></script>
		<script src="../src/extras/geometries/TorusGeometry.js"></script>
		<script src="../src/extras/geometries/TorusKnotGeometry.js"></script>
		<script src="../src/extras/loaders/Loader.js"></script>
		<script src="../src/extras/loaders/BinaryLoader.js"></script>
		<script src="../src/extras/loaders/ColladaLoader.js"></script>
		<script src="../src/extras/loaders/JSONLoader.js"></script>
		<script src="../src/extras/loaders/SceneLoader.js"></script>
		<script src="../src/extras/loaders/UTF8Loader.js"></script>
		<script src="../src/extras/objects/MarchingCubes.js"></script>
		<script src="../src/extras/objects/Trident.js"></script>
		<script src="../src/extras/physics/Collisions.js"></script>
		<script src="../src/extras/physics/CollisionUtils.js"></script>
		<script src="../src/extras/renderers/AnaglyphWebGLRenderer.js"></script>
		<script src="../src/extras/renderers/CrosseyedWebGLRenderer.js"></script>

		<script src="js/ShaderExtras.js"></script>

		<script src="js/RequestAnimationFrame.js"></script>
		<script src="js/Stats.js"></script>

		<script>
150 151 152 153 154

			var statsEnabled = true;

			var container, stats;

155
			var camera, scene, renderer;
156 157 158 159 160 161 162 163 164

			var mesh, zmesh, lightMesh, geometry;

			var mouseX = 0, mouseY = 0;

			var windowHalfX = window.innerWidth / 2;
			var windowHalfY = window.innerHeight / 2;

			init();
165
			animate();
166 167 168 169 170 171

			function init() {

				container = document.createElement( 'div' );
				document.body.appendChild( container );

172
				camera = new THREE.Camera( 60, window.innerWidth / window.innerHeight, 1, 10000 );
173 174 175
				camera.position.z = 3200;

				scene = new THREE.Scene();
176
				scene.fog = new THREE.Fog( 0xffffff, 1, 10000 );
177

178
				var geometry = new THREE.SphereGeometry( 50, 32, 16 );
179

180 181 182
				var uniforms = THREE.ShaderExtras[ 'basic' ].uniforms;
				var vertexShader = THREE.ShaderExtras[ 'basic' ].vertexShader;
				var fragmentShader = THREE.ShaderExtras[ 'basic' ].fragmentShader;
183

184 185
				var texture = new THREE.Texture( generateTexture( 0, 0.5, 1 ), new THREE.UVMapping() );
				var texture2 = new THREE.Texture( generateTexture( 0, 1, 0 ), new THREE.SphericalReflectionMapping() );
186

M
Mr.doob 已提交
187 188
				var materials = [

189 190 191 192
					new THREE.MeshNormalMaterial(),
					new THREE.MeshDepthMaterial(),
					new THREE.MeshBasicMaterial( { color: 0x0066ff, blending: THREE.AdditiveBlending } ),
					new THREE.MeshBasicMaterial( { map: texture, fog: false } ),
193 194
					new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( 'textures/land_ocean_ice_cloud_2048.jpg' ) } ),
					new THREE.MeshBasicMaterial( { map: texture2, envMap: THREE.ImageUtils.loadTexture( 'textures/envmap.png', new THREE.SphericalReflectionMapping() ) } ),
195
					new THREE.ShaderMaterial( { uniforms: uniforms, vertexShader: vertexShader, fragmentShader: fragmentShader } )
196 197

					/*
M
Mr.doob 已提交
198 199 200 201 202 203
					new THREE.MeshLambertMaterial( { color: 0xdddddd, shading: THREE.FlatShading } ),
					new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd, specular: 0x009900, shininess: 30, shading: THREE.FlatShading } ),
					new THREE.MeshLambertMaterial( { color: 0xdddddd, shading: THREE.SmoothShading } ),
					new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd, specular: 0x009900, shininess: 30, shading: THREE.SmoothShading } ),
					new THREE.MeshNormalMaterial( { shading: THREE.SmoothShading } ),
					new THREE.MeshBasicMaterial( { color: 0xffaa00, wireframe: true } ),
204
					new THREE.MeshBasicMaterial( { map: texture, fog: false } ),
205
					new THREE.MeshBasicMaterial( { envMap: texture2, fog: false } ),
206
					new THREE.MeshLambertMaterial( { map: ImageUtils.loadTexture( 'textures/land_ocean_ice_cloud_2048.jpg' ) } ),
207
					new THREE.MeshLambertMaterial( { map: texture2, envMap: ImageUtils.loadTexture( 'textures/envmap.png', new THREE.SphericalReflectionMapping() ) } ),
208
					new THREE.ShaderMaterial( { uniforms: uniforms, vertexShader: vertexShader, fragmentShader: fragmentShader } )
209
					*/
M
Mr.doob 已提交
210 211

				];
212

M
Mr.doob 已提交
213 214 215 216 217 218 219 220 221
				for ( var i = 0, l = geometry.faces.length; i < l; i ++ ) {

					var face = geometry.faces[ i ];
					if ( Math.random() > 0.5 ) face.material = [ materials[ Math.floor( Math.random() * materials.length ) ] ];

				}

				materials.push( new THREE.MeshFaceMaterial() );

222
				// materials = [ new THREE.MeshBasicMaterial( { map: texture, envMap: texture2 } ) ];
223

224
				for ( var i = 0; i < 5000; i ++ ) {
225

M
Mr.doob 已提交
226
					var mesh = new THREE.Mesh( geometry, materials[ Math.floor( Math.random() * materials.length ) ] );
227 228 229
					mesh.position.x = Math.random() * 10000 - 5000;
					mesh.position.y = Math.random() * 10000 - 5000;
					mesh.position.z = Math.random() * 10000 - 5000;
230 231
					mesh.rotation.x = Math.random() * 360 * ( Math.PI / 180 );
					mesh.rotation.y = Math.random() * 360 * ( Math.PI / 180 );
232
					mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 4 + 1;
233
					mesh.matrixAutoUpdate = false;
234
					mesh.updateMatrix();
235
					scene.add( mesh );
236 237 238

				}

239
				renderer = new THREE.WebGLRenderer();
240 241
				renderer.setSize( window.innerWidth, window.innerHeight );
				container.appendChild( renderer.domElement );
242 243 244 245 246 247 248 249 250 251 252

				if ( statsEnabled ) {

					stats = new Stats();
					stats.domElement.style.position = 'absolute';
					stats.domElement.style.top = '0px';
					stats.domElement.style.zIndex = 100;
					container.appendChild( stats.domElement );

				}

253 254
				document.addEventListener( 'mousemove', onDocumentMouseMove, false );

255 256
			}

257
			function generateTexture( r, g, b ) {
M
Mr.doob 已提交
258 259 260 261 262 263 264 265

				var canvas = document.createElement( 'canvas' );
				canvas.width = 256;
				canvas.height = 256;

				var context = canvas.getContext( '2d' );
				var image = context.getImageData( 0, 0, 256, 256 );

266
				var x = 0, y = 0, p;
M
Mr.doob 已提交
267 268 269 270 271

				for ( var i = 0, j = 0, l = image.data.length; i < l; i += 4, j ++ ) {

					x = j % 256;
					y = x == 0 ? y + 1 : y;
272
					p = Math.floor( x ^ y );
M
Mr.doob 已提交
273

274 275 276
					image.data[ i ] = ~~ p * r;
					image.data[ i + 1 ] = ~~ p * g;
					image.data[ i + 2 ] = ~~ p * b;
M
Mr.doob 已提交
277 278 279 280 281 282 283 284 285 286
					image.data[ i + 3 ] = 255;

				}

				context.putImageData( image, 0, 0 );

				return canvas;

			}

287 288 289 290 291 292 293
			function onDocumentMouseMove(event) {

				mouseX = ( event.clientX - windowHalfX ) * 10;
				mouseY = ( event.clientY - windowHalfY ) * 10;

			}

294 295 296 297 298 299 300 301 302 303 304 305
			//

			function animate() {

				requestAnimationFrame( animate );

				render();
				if ( statsEnabled ) stats.update();

			}

			function render() {
306 307 308 309

				camera.position.x += ( mouseX - camera.position.x ) * .05;
				camera.position.y += ( - mouseY - camera.position.y ) * .05;

310
				renderer.render( scene, camera );
311 312 313 314 315 316 317 318 319 320 321 322 323 324

			}

			function log( text ) {

				var e = document.getElementById("log");
				e.innerHTML = text + "<br/>" + e.innerHTML;

			}

		</script>

	</body>
</html>