<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Three框架</title> <script src="../static/three.js-master/build/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 = window.innerWidth; // 寬度 height = window.innerHeight; // 長度 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 = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 10, 1000 ); // 正投影攝像機 camera.position.x = 0; // 設置相機的座標 camera.position.y = 0; camera.position.z = 600; camera.up.x = 0; camera.up.y = 1; // 設置相機的上爲y軸方向 camera.up.z = 0; camera.lookAt(0, 0, 0); // 相機lookAt的點必定顯示在屏幕的正中央:利用這點,咱們能夠實現物體移動時,咱們能夠一直跟蹤物體,讓物體永遠在屏幕的中央 } var scene; // 建立場景 function initScene() { scene = new THREE.Scene(); } var light; // 建立光源 function initLight() { light = new THREE.AmbientLight(0xFF0000); // 環境光源 light.position.set(100, 100, 200); scene.add(light); light = new THREE.PointLight(0x00FF00); // 點光源 light.position.set(0, 0,300); scene.add(light); } var cube; function initObject() { var geometry = new THREE.CylinderGeometry( 70,100,200); // 建立幾何體 寬度 長度 深度 var material = new THREE.MeshLambertMaterial( { color:0xFFFFFF} ); // 建立外表和設置顏色 var mesh = new THREE.Mesh( geometry,material); // Mesh是一個類,用來生成物體 mesh.position = new THREE.Vector3(0,0,0); scene.add(mesh); // 加到場景 } function threeStart() { initThree(); initCamera(); initScene(); initLight(); initObject(); animation(); } function animation() { changeFov(); renderer.render(scene, camera); requestAnimationFrame(animation); // 循環調用 } function setCameraFov(fov) { camera.fov = fov; camera.updateProjectionMatrix(); } function changeFov() { var txtFov = document.getElementById("txtFov").value; var val = parseFloat(txtFov); setCameraFov(val); } </script> </head> <body onload="threeStart();"> <div id="canvas-frame"></div> <div> Fov:<input type="text" value="45" id="txtFov"/>(0到180的值) </div> </body> </html>
附帶three.js代碼,點擊下載css
上面代碼是透視投影攝像機的效果,以下圖所示:html
正投影攝像機canvas
camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 10, 1000 );
它基本上各個方向大小都相同,沒有透視的效果。以下圖所示:app