webgl_materials_lightmap.html 3.8 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
<!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;
			}
			a { color:skyblue }
		</style>
	</head>

	<body>
M
r76  
Mr.doob 已提交
21
		<script src="../build/three.js"></script>
M
Mr.doob 已提交
22

M
r69  
Mr.doob 已提交
23
		<script src="js/controls/OrbitControls.js"></script>
M
Mr.doob 已提交
24

M
r97  
Mr.doob 已提交
25
		<script src="js/WebGL.js"></script>
M
Mr.doob 已提交
26 27 28 29 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
		<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 已提交
55
				gl_FragColor = vec4( mix( bottomColor, topColor, max( pow( max( h, 0.0 ), exponent ), 0.0 ) ), 1.0 );
M
Mr.doob 已提交
56 57 58 59 60 61 62 63 64 65

			}

		</script>

		<script>

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

M
r72  
Mr.doob 已提交
66
			var container, stats;
M
Mr.doob 已提交
67 68 69 70 71 72 73 74 75 76 77 78 79
			var camera, scene, renderer;

			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 已提交
80
				camera.position.set( 700, 200, - 500 );
M
Mr.doob 已提交
81 82 83 84 85 86 87

				// SCENE

				scene = new THREE.Scene();

				// CONTROLS

M
r86  
Mr.doob 已提交
88
				var controls = new THREE.OrbitControls( camera );
M
r72  
Mr.doob 已提交
89 90
				controls.maxPolarAngle = 0.9 * Math.PI / 2;
				controls.enableZoom = false;
M
Mr.doob 已提交
91 92 93

				// LIGHTS

M
r73  
Mr.doob 已提交
94 95 96
				var light = new THREE.DirectionalLight( 0xaabbff, 0.3 );
				light.position.x = 300;
				light.position.y = 250;
M
r98  
Mr.doob 已提交
97
				light.position.z = - 500;
M
r73  
Mr.doob 已提交
98
				scene.add( light );
M
Mr.doob 已提交
99 100 101 102 103 104

				// SKYDOME

				var vertexShader = document.getElementById( 'vertexShader' ).textContent;
				var fragmentShader = document.getElementById( 'fragmentShader' ).textContent;
				var uniforms = {
M
r104  
Mr.doob 已提交
105 106 107 108
					topColor: { value: new THREE.Color( 0x0077ff ) },
					bottomColor: { value: new THREE.Color( 0xffffff ) },
					offset: { value: 400 },
					exponent: { value: 0.6 }
M
r72  
Mr.doob 已提交
109
				};
M
r73  
Mr.doob 已提交
110
				uniforms.topColor.value.copy( light.color );
M
Mr.doob 已提交
111

M
r92  
Mr.doob 已提交
112
				var skyGeo = new THREE.SphereBufferGeometry( 4000, 32, 15 );
M
r69  
Mr.doob 已提交
113 114 115 116 117 118
				var skyMat = new THREE.ShaderMaterial( {
					uniforms: uniforms,
					vertexShader: vertexShader,
					fragmentShader: fragmentShader,
					side: THREE.BackSide
				} );
M
Mr.doob 已提交
119 120 121 122 123 124

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

				// RENDERER

M
r65  
Mr.doob 已提交
125
				renderer = new THREE.WebGLRenderer( { antialias: true } );
M
r70  
Mr.doob 已提交
126
				renderer.setPixelRatio( window.devicePixelRatio );
M
Mr.doob 已提交
127 128 129 130 131 132 133 134 135
				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
				container.appendChild( renderer.domElement );

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

				// STATS

				stats = new Stats();
M
r76  
Mr.doob 已提交
136
				container.appendChild( stats.dom );
M
Mr.doob 已提交
137 138 139

				// MODEL

M
r97  
Mr.doob 已提交
140 141
				var loader = new THREE.ObjectLoader();
				loader.load( "models/json/lightmap/lightmap.json", function ( object ) {
M
Mr.doob 已提交
142

M
r97  
Mr.doob 已提交
143
					scene.add( object );
M
r69  
Mr.doob 已提交
144 145

				} );
M
Mr.doob 已提交
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168

				//

				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 已提交
169
				stats.update();
M
Mr.doob 已提交
170 171 172 173 174 175

			}

		</script>

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

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