`
18211103738
  • 浏览: 82976 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ThreeJS系列教程-Lesson2

阅读更多

效果:

 

代码:

<!DOCTYPE html>
<html>
     <head>
		<meta charset="utf-8"/>
        <title>Three.js tutorial - Lesson 02</title>
        <style>body{background: #eeeeee;overflow: hidden;}</style>
        <script src="js/r69/three.js"></script>
        <script src="js/r69/Detector.js"></script> 
        <script src="js/r69/CanvasRenderer.js"></script>
        <script src="js/r69/Projector.js"></script>
     </head> 
     <body>
         <div id="WebGLCanvas"></div>
         <script>
		    var scene = new THREE.Scene();
			
			var canvasWidth = window.innerWidth; 
            var canvasHeight = window.innerHeight;
			
            var camera = new THREE.PerspectiveCamera(45, canvasWidth / canvasHeight, 1, 100); 
            camera.position.set(0, 0, 10); 
            camera.lookAt(scene.position);
            scene.add(camera);
			
			var renderer;
            if(Detector.webgl){ 
                renderer = new THREE.WebGLRenderer({antialias:true});	//创建一个抗锯齿效果的渲染器
            } else { 
                renderer = new THREE.CanvasRenderer(); 
            }
            renderer.setClearColor(0xeeeeee, 1);
			
            renderer.setSize(canvasWidth, canvasHeight);
            
            document.getElementById("WebGLCanvas").appendChild(renderer.domElement);
				 
            var triangleGeometry = new THREE.Geometry(); 
            triangleGeometry.vertices.push(new THREE.Vector3( 0.0,  1.0, 0.0)); 
            triangleGeometry.vertices.push(new THREE.Vector3(-1.0, -1.0, 0.0)); 
            triangleGeometry.vertices.push(new THREE.Vector3( 1.0, -1.0, 0.0)); 
            triangleGeometry.faces.push(new THREE.Face3(0, 1, 2));
			
            // To color the surface, a material has to be created. If all vertices shall have
			// different colors, we need to set the vertex colors of each face. The colors in
			// between will be interpolated as color gradients.
			// Unfortunately, the canvas renderer doesn't support vertex colors (yet [Three.js, 
			// release 69]). Either you accept a white face color, or set another face color.	 
			/*给顶点赋予颜色*/
			triangleGeometry.faces[0].vertexColors[0] = new THREE.Color(0xFF0000); 
            triangleGeometry.faces[0].vertexColors[1] = new THREE.Color(0x00FF00); 
            triangleGeometry.faces[0].vertexColors[2] = new THREE.Color(0x0000FF);
            
			// To activate the vertex color, we have to set 'vertexColors' attribute to 
			// 'THREE.VertexColors'. Otherwise they won't be displayed.
			
			// Create a basic material, supporting vertex colors. Activate the 'doubleSided' 
			// attribute to force the rendering of both sides of each face (front and back). 
			// This prevents the so called 'backface culling'. Usually, only the side is 
			// rendered, whose normal vector points towards the camera. The other side is not 
			// rendered (backface culling). But this performance optimization sometimes leads 
			// to wholes in the surface. When this happens in your surface, simply set 
			// 'doubleSided' to 'true'. 
            var triangleMaterial = new THREE.MeshBasicMaterial({ 
				//color:0xFFFFFF, 
				vertexColors:THREE.VertexColors,	//将顶点颜色放入材质中
				side:THREE.DoubleSide 
            });
			
            var triangleMesh = new THREE.Mesh(triangleGeometry, triangleMaterial); 
            triangleMesh.position.set(-1.5, 0.0, 4.0); 
            scene.add(triangleMesh);
				 
            var squareGeometry = new THREE.Geometry(); 
            squareGeometry.vertices.push(new THREE.Vector3(-1.0,  1.0, 0.0)); 
            squareGeometry.vertices.push(new THREE.Vector3( 1.0,  1.0, 0.0)); 
            squareGeometry.vertices.push(new THREE.Vector3( 1.0, -1.0, 0.0)); 
            squareGeometry.vertices.push(new THREE.Vector3(-1.0, -1.0, 0.0)); 
            squareGeometry.faces.push(new THREE.Face3(0, 1, 2)); 
            squareGeometry.faces.push(new THREE.Face3(0, 2, 3));
			
            var squareMaterial = new THREE.MeshBasicMaterial({
				color:0x8080FF/*, 
				side:THREE.DoubleSide */	//不设置side属性为DoubleSide,当正方形旋转到背面就看不到了
            });
			
            var squareMesh = new THREE.Mesh(squareGeometry, squareMaterial); 
            squareMesh.position.set(1.5, 0.0, 4.0);
            scene.add(squareMesh);
			
            function render(){ 
				triangleMesh.rotation.y += 0.1; 	//绕y轴旋转,旋转速率为0.1
				squareMesh.rotation.x -= 0.075;		//绕x轴旋转,旋转速率为0.075
				renderer.render(scene, camera);
				requestAnimationFrame(render);		//帧动画
            }
			render();
         </script> 
     </body> 
</html>

附注:当前笔者使用的three.js版本是r69

  • 大小: 34.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics