webgl_materials_lightmap.html 4.3 KB
Newer Older
M
Mr.doob 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
<!DOCTYPE html>
<html lang="en">
	<head>
		<title>three.js webgl - materials - lightmap</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:#fff;
				padding:0;
				margin:0;
				overflow:hidden;
				font-family:georgia;
				text-align:center;
			}
			h1 { }
			a { color:skyblue }

			#stats { position: absolute; top:0; left: 0 }
			#stats #fps { background: transparent !important }
			#stats #fps #fpsText { color: #abc !important }
			#stats #fps #fpsGraph { display: none }
		</style>
	</head>

	<body>
		<script src="../build/three.min.js"></script>

M
r69  
Mr.doob 已提交
29
		<script src="js/controls/OrbitControls.js"></script>
M
Mr.doob 已提交
30 31 32 33 34 35 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

		<script src="js/Detector.js"></script>
		<script src="js/libs/stats.min.js"></script>

		<script type="x-shader/x-vertex" id="vertexShader">

			varying vec3 vWorldPosition;

			void main() {

				vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
				vWorldPosition = worldPosition.xyz;

				gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );

			}

		</script>

		<script type="x-shader/x-fragment" id="fragmentShader">

			uniform vec3 topColor;
			uniform vec3 bottomColor;
			uniform float offset;
			uniform float exponent;

			varying vec3 vWorldPosition;

			void main() {

				float h = normalize( vWorldPosition + offset ).y;
M
r68  
Mr.doob 已提交
61
				gl_FragColor = vec4( mix( bottomColor, topColor, max( pow( max( h, 0.0 ), exponent ), 0.0 ) ), 1.0 );
M
Mr.doob 已提交
62 63 64 65 66 67 68 69 70 71

			}

		</script>

		<script>

			var SCREEN_WIDTH = window.innerWidth;
			var SCREEN_HEIGHT = window.innerHeight;

M
r72  
Mr.doob 已提交
72
			var container, stats;
M
Mr.doob 已提交
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
			var camera, scene, renderer;

			var clock = new THREE.Clock();

			init();
			animate();

			function init() {

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

				// CAMERA

				camera = new THREE.PerspectiveCamera( 40, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
M
r72  
Mr.doob 已提交
88
				camera.position.set( 700, 200, - 500 );
M
Mr.doob 已提交
89 90 91 92 93 94 95

				// SCENE

				scene = new THREE.Scene();

				// CONTROLS

M
r69  
Mr.doob 已提交
96
				controls = new THREE.OrbitControls( camera );
M
r72  
Mr.doob 已提交
97 98
				controls.maxPolarAngle = 0.9 * Math.PI / 2;
				controls.enableZoom = false;
M
Mr.doob 已提交
99 100 101

				// LIGHTS

M
r73  
Mr.doob 已提交
102 103 104 105 106
				var light = new THREE.DirectionalLight( 0xaabbff, 0.3 );
				light.position.x = 300;
				light.position.y = 250;
				light.position.z = -500;
				scene.add( light );
M
Mr.doob 已提交
107 108 109 110 111 112 113 114 115 116

				// SKYDOME

				var vertexShader = document.getElementById( 'vertexShader' ).textContent;
				var fragmentShader = document.getElementById( 'fragmentShader' ).textContent;
				var uniforms = {
					topColor: 	 { type: "c", value: new THREE.Color( 0x0077ff ) },
					bottomColor: { type: "c", value: new THREE.Color( 0xffffff ) },
					offset:		 { type: "f", value: 400 },
					exponent:	 { type: "f", value: 0.6 }
M
r72  
Mr.doob 已提交
117
				};
M
r73  
Mr.doob 已提交
118
				uniforms.topColor.value.copy( light.color );
M
Mr.doob 已提交
119 120

				var skyGeo = new THREE.SphereGeometry( 4000, 32, 15 );
M
r69  
Mr.doob 已提交
121 122 123 124 125 126
				var skyMat = new THREE.ShaderMaterial( {
					uniforms: uniforms,
					vertexShader: vertexShader,
					fragmentShader: fragmentShader,
					side: THREE.BackSide
				} );
M
Mr.doob 已提交
127 128 129 130 131 132

				var sky = new THREE.Mesh( skyGeo, skyMat );
				scene.add( sky );

				// RENDERER

M
r65  
Mr.doob 已提交
133
				renderer = new THREE.WebGLRenderer( { antialias: true } );
M
r70  
Mr.doob 已提交
134
				renderer.setPixelRatio( window.devicePixelRatio );
M
Mr.doob 已提交
135 136 137 138 139 140 141 142 143 144 145 146 147 148
				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
				container.appendChild( renderer.domElement );

				renderer.gammaInput = true;
				renderer.gammaOutput = true;

				// STATS

				stats = new Stats();
				container.appendChild( stats.domElement );

				// MODEL

				var loader = new THREE.JSONLoader();
M
r69  
Mr.doob 已提交
149
				loader.load( "obj/lightmap/lightmap.js", function ( geometry, materials ) {
M
Mr.doob 已提交
150

M
r72  
Mr.doob 已提交
151 152 153 154 155 156
					for ( var i = 0; i < materials.length; i ++ ) {

						materials[ i ].lightMapIntensity = 0.75;

					}

M
r74  
Mr.doob 已提交
157
					var mesh = new THREE.Mesh( geometry, new THREE.MultiMaterial( materials ) );
M
r72  
Mr.doob 已提交
158

M
r69  
Mr.doob 已提交
159 160 161 162
					mesh.scale.multiplyScalar( 100 );
					scene.add( mesh );

				} );
M
Mr.doob 已提交
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185

				//

				window.addEventListener( 'resize', onWindowResize, false );

			}

			function onWindowResize() {

				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();

				renderer.setSize( window.innerWidth, window.innerHeight );

			}

			//

			function animate() {

				requestAnimationFrame( animate );

				renderer.render( scene, camera );
M
r69  
Mr.doob 已提交
186
				stats.update();
M
Mr.doob 已提交
187 188 189 190 191 192

			}

		</script>

	</body>
M
r72  
Mr.doob 已提交
193

M
Mr.doob 已提交
194
</html>