使用welgl绘制国旗

第一次玩这个觉得还挺牛逼的
框架 three.js 原生webgl貌似比较繁琐 不适合我们这样的初学者
http://www.hewebgl.com/ 这个是我刚入门的网站 从里面抄了好多代码
有几个例子真的强 http://www.hewebgl.com/code/show/4.html
图形学作业是绘制国旗 我闲着没事 (好多作业TOT)就去玩了一把
毕竟基础的前端就是ctrl+C ctrl+V (前端别打我) 效果大概是这样的 有些地方画的比较歪 调一下参数就好了 2333 忙死了就不调了
使用welgl绘制国旗
画圆

画平面
画七角的比较有趣 想着一个点在两个不同大小的圆之间动来动去的路径

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Three框架</title>
		<script src="https://cdn.bootcss.com/three.js/r83/three.js"></script>
		<style type="text/css">
			div#canvas-frame {
				border: none;
				cursor: pointer;
				width: 100%;
				height: 600px;
				background-color: #EEEEEE;
			}

		</style>
		<script>
            var renderer;
            function initThree() {
                width = document.getElementById('canvas-frame').clientWidth;
                height = document.getElementById('canvas-frame').clientHeight;
                renderer = new THREE.WebGLRenderer({
                    antialias : true
                });
                renderer.setSize(width, height);
                document.getElementById('canvas-frame').appendChild(renderer.domElement);
                renderer.setClearColor(0xFFFFFF, 1.0);
            }

            var camera;
            function initCamera() {
                camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
                camera.position.x = 0;
                camera.position.y = 1000;
                camera.position.z = 0;
                camera.up.x = 0;
                camera.up.y = 0;
                camera.up.z = 1;
                camera.lookAt({
                    x : 0,
                    y : 0,
                    z : 0
                });
            }

            var scene;
            function initScene() {
                scene = new THREE.Scene();
            }
   	 		   var material = new THREE.MeshBasicMaterial({
                color: 0x003993,
                wireframe: true
            });
        	function drawPlane(scene, material) {
            	var plane = new THREE.Mesh(new THREE.PlaneGeometry(4, 4), material);
            	scene.add(plane);
        	}
            var light;
            function initLight() {
                light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);
                light.position.set(100, 100, 200);
                scene.add(light);
            }

            var cube;
            function initObject() {

                var geometry = new THREE.Geometry();
                var material = new THREE.LineBasicMaterial( { vertexColors: true } );
                var color1 = new THREE.Color( 0x003993 ), color2 = new THREE.Color( 0x003993 );

                // 线的材质可以由2点的颜色决定
                var p1 = new THREE.Vector3( 756, 0, 222 );
                var p2 = new THREE.Vector3( -756, 0, 222 );
                geometry.vertices.push(p1);
                geometry.vertices.push(p2);
                geometry.colors.push( color1, color2 );

                var line = new THREE.Line( geometry, material, THREE.LinePieces );
                scene.add(line);
            }
            var width = 1512;
            var height = 756;
            function createRect(){//背景蓝
  				var planeGeometry = new THREE.PlaneBufferGeometry(width,height, 1, 1);
				// 创建平面的材料
				var planeMaterial = new THREE.MeshBasicMaterial({color: 0x003993});
				// 合成平面
				var plane = new THREE.Mesh(planeGeometry, planeMaterial);
				// 设置平面的旋转角度
				plane.rotation.x = -0.5 * Math.PI;
				// // 设置平面的位置
				// plane.position.x = 0;
				// plane.position.y = 0;
				// plane.position.z = 0;
				// 在场景中添加平面
				scene.add(plane);
			}
			   function createRect1(){//背景红 横着
  				var planeGeometry = new THREE.PlaneBufferGeometry(width/2,height/10, 1, 1);
				// 创建平面的材料
				var planeMaterial = new THREE.MeshBasicMaterial({color: 0xFF0000});
				// 合成平面
				var plane = new THREE.Mesh(planeGeometry, planeMaterial);
				// 设置平面的旋转角度
				plane.rotation.x = -0.5 * Math.PI;
				// // 设置平面的位置
				plane.position.x = width/4;
				plane.position.y =0;
				plane.position.z =  height/4;
				// 在场景中添加平面
				scene.add(plane);
			}
			 function createRect2(){//背景红 竖着
  				var planeGeometry = new THREE.PlaneBufferGeometry(width/20,height/2, 1, 1);
				// 创建平面的材料
				var planeMaterial = new THREE.MeshBasicMaterial({color: 0xFF0000});
				// 合成平面
				var plane = new THREE.Mesh(planeGeometry, planeMaterial);
				// 设置平面的旋转角度
				plane.rotation.x = -0.5 * Math.PI;
				// // 设置平面的位置
				plane.position.x = width/4;
				plane.position.y =0;
				plane.position.z =  height/4;
				// 在场景中添加平面
				scene.add(plane);
			}
			 function createRect3(){//背景白 横着
  				var planeGeometry = new THREE.PlaneBufferGeometry(width/2,height/6, 1, 1);
				// 创建平面的材料
				var planeMaterial = new THREE.MeshBasicMaterial({color: 0xFFFFFF});
				// 合成平面
				var plane = new THREE.Mesh(planeGeometry, planeMaterial);
				// 设置平面的旋转角度
				plane.rotation.x = -0.5 * Math.PI;
				// // 设置平面的位置
				plane.position.x = width/4;
				plane.position.y =0;
				plane.position.z =  height/4;
				// 在场景中添加平面
				scene.add(plane);
			}
			function createSeven(){  //左下角最大的
				var rectShape= new THREE.Shape();
				var R = 2268/29;var r = 1008/29;
				var theta = Math.PI/2;
				var delta = Math.PI/7;
				var sx = width/4;
				var se = height/4;
				rectShape.moveTo(sx,se);
				for(var i=0;i<8;i++){
					rectShape.lineTo(sx-R*Math.cos(theta), se-R*Math.sin(theta));
					theta-=delta;
					rectShape.lineTo(sx-r*Math.cos(theta), se-r*Math.sin(theta));
					theta-=delta;
				}
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xffffff } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}

			function createSeven1(){  //右边第一个
				var rectShape= new THREE.Shape();
				var R = 1080/29;var r = 600/29;
				var theta = Math.PI/2;
				var delta = Math.PI/7;
				var sx = -width/16;
				var se = -height/16;
				rectShape.moveTo(sx,se);
				for(var i=0;i<8;i++){
					rectShape.lineTo(sx-R*Math.cos(theta), se-R*Math.sin(theta));
					theta-=delta;
					rectShape.lineTo(sx-r*Math.cos(theta), se-r*Math.sin(theta));
					theta-=delta;
				}
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xffffff } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}
			function createSeven2(){  //右边第2个
				var rectShape= new THREE.Shape();
				var R = 1080/29;var r = 600/29;
				var theta = Math.PI/2;
				var delta = Math.PI/7;
				var sx = -width/4;
				var se = -height/3;
				rectShape.moveTo(sx,se);
				for(var i=0;i<8;i++){
					rectShape.lineTo(sx-R*Math.cos(theta), se-R*Math.sin(theta));
					theta-=delta;
					rectShape.lineTo(sx-r*Math.cos(theta), se-r*Math.sin(theta));
					theta-=delta;
				}
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xffffff } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}

			function createSeven3(){  //右边第3个
				var rectShape= new THREE.Shape();
				var R = 1080/29;var r = 600/29;
				var theta = Math.PI/2;
				var delta = Math.PI/7;
				var sx = -width/4;
				var se = height/3;
				rectShape.moveTo(sx,se);
				for(var i=0;i<8;i++){
					rectShape.lineTo(sx-R*Math.cos(theta), se-R*Math.sin(theta));
					theta-=delta;
					rectShape.lineTo(sx-r*Math.cos(theta), se-r*Math.sin(theta));
					theta-=delta;
				}
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xffffff } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}

			function createSeven4(){  //右边第4个
				var rectShape= new THREE.Shape();
				var R = 1080/49;var r = 600/49;
				var theta = Math.PI/2;
				var delta = Math.PI/7;
				var sx = -width/3;
				var se = -height/38;
				rectShape.moveTo(sx,se);
				for(var i=0;i<8;i++){
					rectShape.lineTo(sx-R*Math.cos(theta), se-R*Math.sin(theta));
					theta-=delta;
					rectShape.lineTo(sx-r*Math.cos(theta), se-r*Math.sin(theta));
					theta-=delta;
				}
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xffffff } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}
			function createSeven5(){  //右边第5个 七角星
				var rectShape= new THREE.Shape();
				var R = 1080/29;var r = 600/29;
				var theta = Math.PI/2;
				var delta = Math.PI/7;
				var sx = -width/2.6;
				var se = -height/4;
				rectShape.moveTo(sx,se);
				for(var i=0;i<8;i++){
					rectShape.lineTo(sx-R*Math.cos(theta), se-R*Math.sin(theta));
					theta-=delta;
					rectShape.lineTo(sx-r*Math.cos(theta), se-r*Math.sin(theta));
					theta-=delta;
				}
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xffffff } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}
			function createRect4(){//背景白 竖着
  				var planeGeometry = new THREE.PlaneBufferGeometry(width/13,height/2, 1, 1);
				// 创建平面的材料
				var planeMaterial = new THREE.MeshBasicMaterial({color: 0xFFFFFF});
				// 合成平面
				var plane = new THREE.Mesh(planeGeometry, planeMaterial);
				// 设置平面的旋转角度
				plane.rotation.x = -0.5 * Math.PI;
				// // 设置平面的位置
				plane.position.x = width/4;
				plane.position.y =0;
				plane.position.z =  height/4;
				// 在场景中添加平面
				scene.add(plane);
			}
   			function initObject1() {
                var geometry = new THREE.Geometry();
                var material = new THREE.LineBasicMaterial( { vertexColors: true } );
                var color1 = new THREE.Color( 0x003993 ), color2 = new THREE.Color( 0x003993 );
                // 线的材质可以由2点的颜色决定
                var p1 = new THREE.Vector3( 756, 0, -378 );
                var p2 = new THREE.Vector3( -756, 0, -378 );
                geometry.vertices.push(p1);
                geometry.vertices.push(p2);
                geometry.colors.push( color1, color2 );
                var line = new THREE.Line( geometry, material, THREE.LinePieces );
                scene.add(line);
            }
            function createCircle(){
            	var geometry = new THREE.CircleBufferGeometry( 35, 100 );
				var material = new THREE.MeshBasicMaterial( { color: 0xFFFFFF } );
				var circle = new THREE.Mesh( geometry, material );
				circle.rotation.x = -0.5 * Math.PI;
				circle.position.x = width/4;
				circle.position.y =0;
				circle.position.z =  -height/4;
				scene.add( circle );
            }
            function createMi1(){  //左上角到右下角的米  白色
				var rectShape= new THREE.Shape();
				var sx = width/2;
				var se = -height/2;
				rectShape.moveTo(sx,se);
				rectShape.lineTo(sx+80, se);
				rectShape.lineTo(80,0);
				rectShape.lineTo(0,0);
				rectShape.lineTo(0,-42);
				rectShape.lineTo(sx-80,se);
				rectShape.lineTo(sx,se);
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xffffff } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}
			  function createMi2(){  //左下角到右上角的米 白色
				var rectShape= new THREE.Shape();
				var sx = width/2;
				var se = 0;
				rectShape.moveTo(sx,se);
				rectShape.lineTo(sx-80, se);
				rectShape.lineTo(0,-height/2+42);
				rectShape.lineTo(0,-height/2);
				rectShape.lineTo(80,-height/2);
				rectShape.lineTo(sx,se-42);
				rectShape.lineTo(sx,se);
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xffffff } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}
			  function createRed1(){  //左下角到右上角 的红
				var rectShape= new THREE.Shape();
				var sx = width/2;
				var se = 0;
				rectShape.moveTo(sx,se);
				rectShape.lineTo(sx-60, se);
				rectShape.lineTo(0,-height/2);
				rectShape.lineTo(50,-height/2);
				rectShape.lineTo(sx,se);
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xFF0000 } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}
			function createRed2(){  //左上角到右下角 的红
				var rectShape= new THREE.Shape();
				var sx = width/2;
				var se = -height/2;
				rectShape.moveTo(sx,se);
				rectShape.lineTo(sx, se+22);
				rectShape.lineTo(0,0);
				rectShape.lineTo(0,-22);
				rectShape.lineTo(sx,se);
				var rectGeom = new THREE.ShapeGeometry( rectShape );
				var rectMesh = new THREE.Mesh( rectGeom, new THREE.MeshBasicMaterial( { color: 0xFF0000 } ) ) ;
				rectMesh.rotation.x = -0.5 * Math.PI;
				scene.add(rectMesh);
			}
            function threeStart() {
                initThree();
                initCamera();
                initScene();
                initLight();
                createRect();
                createMi1();
                createMi2();
                createRed1();
                createRed2();
                createRect3();
                createRect4();
                createRect1();
                createRect2();
                createSeven();
                createSeven1();
                createSeven2();
                createSeven3();
                createSeven4();
                createSeven5();
                renderer.clear();
                renderer.render(scene, camera);
            }

		</script>
	</head>

	<body onload="threeStart();">
		<div id="canvas-frame"></div>
	</body>
</html>