Browse Source

Simplified raymarching example a bit more.

Mr.doob 7 years ago
parent
commit
fcc7e8fdc3
1 changed files with 37 additions and 50 deletions
  1. 37 50
      examples/webgl_raymarching_reflect.html

+ 37 - 50
examples/webgl_raymarching_reflect.html

@@ -5,6 +5,10 @@
 		<meta charset="utf-8">
 		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
 		<style type="text/css">
+			html, body {
+				height: 100%;
+			}
+
 			body {
 				background-color: black;
 				margin: 0;
@@ -13,20 +17,18 @@
 
 			a { color: skyblue }
 
-			canvas {
-				display: block;
-				position: absolute;
-				top: 0;
-				left: 0;
-				right: 0;
-				bottom: 0;
-				margin: auto;
+			#container {
+				width: 100%;
+				height: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
 			}
 
 			#info {
+				position: absolute;
 				color: white;
 				font-size: 13px;
-				position: absolute;
 				bottom: 10px;
 				width: 100%;
 				text-align: center;
@@ -38,7 +40,10 @@
 
 		<div id="info">
 			<a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> - webgl raymarching example -
-			reflect by <a href="https://github.com/gam0022" target="_blank" rel="noopener">gam0022</a> (<a href="http://qiita.com/gam0022/items/03699a07e4a4b5f2d41f" target="_blank" rel="noopener">article in Japanese</a>)
+			reflect by <a href="https://github.com/gam0022" target="_blank" rel="noopener">gam0022</a> (<a href="http://qiita.com/gam0022/items/03699a07e4a4b5f2d41f" target="_blank" rel="noopener">article</a>)
+		</div>
+		<div id="container">
+			<canvas id="canvas"></canvas>
 		</div>
 
 		<script id="fragment_shader" type="x-shader/x-fragment">
@@ -257,10 +262,8 @@
 
 		<script>
 
-			var camera, scene, controls, renderer;
+			var dolly, camera, scene, renderer;
 			var geometry, material, mesh;
-			var mouse = new THREE.Vector2( 0.5, 0.5 );
-			var canvas;
 			var stats;
 
 			var config = {
@@ -270,7 +273,6 @@
 					window.open( canvas.toDataURL() );
 
 				},
-				orbitControls: false,
 				resolution: '512'
 			};
 
@@ -279,19 +281,21 @@
 
 			function init() {
 
-				renderer = new THREE.WebGLRenderer();
+				renderer = new THREE.WebGLRenderer( { canvas: canvas } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( config.resolution, config.resolution );
 
-				canvas = renderer.domElement;
-				canvas.addEventListener( 'mousemove', onMouseMove );
 				window.addEventListener( 'resize', onWindowResize );
-				document.body.appendChild( canvas );
 
 				// Scene
 				scene = new THREE.Scene();
 
+				dolly = new THREE.Group();
+				scene.add( dolly );
+
 				camera = new THREE.PerspectiveCamera( 60, canvas.width / canvas.height, 1, 2000 );
+				camera.position.z = 4;
+				dolly.add( camera );
 
 				geometry = new THREE.PlaneBufferGeometry( 2.0, 2.0 );
 				material = new THREE.RawShaderMaterial( {
@@ -308,12 +312,11 @@
 				scene.add( mesh );
 
 				// Controls
-				controls = new THREE.OrbitControls( camera, canvas );
+				var controls = new THREE.OrbitControls( camera, canvas );
 
 				// GUI
 				var gui = new dat.GUI();
 				gui.add( config, 'saveImage' ).name( 'Save Image' );
-				gui.add( config, 'orbitControls' ).name( 'Orbit Controls' );
 				gui.add( config, 'resolution', [ '256', '512', '800', 'full' ] ).name( 'Resolution' ).onChange( onWindowResize );
 
 				stats = new Stats();
@@ -321,36 +324,7 @@
 
 			}
 
-			function render( timestamp ) {
-
-				stats.begin();
-
-				if ( config.orbitControls ) {
-
-					controls.update();
-
-				} else {
-
-					camera.position.set( mouse.x * 2 - 1, mouse.y * 4, timestamp * 0.001 );
-					camera.rotation.set( 0.25, - Math.PI, 0 );
-
-				}
-
-				renderer.render( scene, camera );
-
-				stats.end();
-				requestAnimationFrame( render );
-
-			}
-
-			function onMouseMove( e ) {
-
-				mouse.x = e.clientX / window.innerWidth;
-				mouse.y = e.clientY / window.innerHeight;
-
-			}
-
-			function onWindowResize( e ) {
+			function onWindowResize() {
 
 				if ( config.resolution === 'full' ) {
 
@@ -370,6 +344,19 @@
 
 			}
 
+			function render( time ) {
+
+				stats.begin();
+
+				dolly.position.z = - time / 1000;
+
+				renderer.render( scene, camera );
+
+				stats.end();
+				requestAnimationFrame( render );
+
+			}
+
 		</script>
 
 	</body>