소스 검색

Improvements to terrain ray cast example.

Mr.doob 12 년 전
부모
커밋
53dbc387d1
1개의 변경된 파일12개의 추가작업 그리고 40개의 파일을 삭제
  1. 12 40
      examples/webgl_geometry_terrain_raycast.html

+ 12 - 40
examples/webgl_geometry_terrain_raycast.html

@@ -32,7 +32,7 @@
 	<body>
 
 		<div id="container"><br /><br /><br /><br /><br />Generating world...</div>
-		<div id="info"><a href="http://threejs.org" target="_blank">three.js</a> - webgl terrain raycasting demo<br />(left click: forward, right click: backward)</div>
+		<div id="info"><a href="http://threejs.org" target="_blank">three.js</a> - webgl terrain raycasting demo</div>
 
 		<script src="../build/three.min.js"></script>
 
@@ -63,7 +63,7 @@
 			var clock = new THREE.Clock();
 
 			var shouldSphereFollowMouse = true;
-			var checkeredSphere;
+			var helper;
 
 			init();
 			animate();
@@ -106,11 +106,11 @@
 				mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { map: texture } ) );
 				scene.add( mesh );
 
-				var sphereGeometry = new THREE.SphereGeometry(100, 20, 20);
-				checkeredSphere = new THREE.Mesh(sphereGeometry, new THREE.MeshBasicMaterial( { map: generateCheckerTexture() } ) );
-				checkeredSphere.position.y = 1000;
-
-				scene.add( checkeredSphere );
+				var geometry = new THREE.CylinderGeometry( 0, 20, 100, 3 );
+				geometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, 50, 0 ) );
+				geometry.applyMatrix( new THREE.Matrix4().makeRotationX( Math.PI / 2 ) );
+				helper = new THREE.Mesh( geometry, new THREE.MeshNormalMaterial() );
+				scene.add( helper );
 
 				renderer = new THREE.WebGLRenderer();
 				renderer.setSize( window.innerWidth, window.innerHeight );
@@ -237,38 +237,6 @@
 
 			}
 
-			function generateCheckerTexture() {
-
-				var width = 128;
-				var height = 128;
-
-				var size = width * height;
-				var checkerSize = 16;
-				var checkerHalfSize = checkerSize / 2;
-				var data = new Uint8Array( 3 * size );
-
-				for ( var i = 0; i < height; ++i ) {
-
-					var index = i * width * 3;
-					var verticalShade = Math.floor((i / checkerSize) % 2);
-
-					for ( var j = 0; j < width; ++j ) {
-
-						var shade = Math.floor( (j / checkerSize + verticalShade) % 2);
-						shade *= 255.0;
-
-						data[ index + j * 3 ] 	  = shade;
-						data[ index + j * 3 + 1 ] = shade;
-						data[ index + j * 3 + 2 ] = shade;
-					}
-				}
-
-				var texture = new THREE.DataTexture( data, width, height, THREE.RGBFormat );
-				texture.needsUpdate = true;
-
-				return texture;
-			}
-
 			//
 
 			function animate() {
@@ -308,7 +276,11 @@
 
 					// Toggle rotation bool for meshes that we clicked
 					if ( intersects.length > 0 ) {
-						checkeredSphere.position = intersects[ 0 ].point;
+
+						helper.position.set( 0, 0, 0 );
+						helper.lookAt( intersects[ 0 ].face.normal );
+
+						helper.position.copy( intersects[ 0 ].point );
 
 					}
 				}