這一篇主要學習代碼重構的方法以及ThreeJS中的一些對象屬性的介紹和使用:
官方代碼解析:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Three框架</title>
<script src="js/Three.js" data-ke-src="js/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;//定義一個全局變量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);
//將創建的canvas元素(此處的canvas元素爲three.js創建)添加到html文檔中
document.getElementById('canvas-frame').appendChild(renderer.domElement);
//設置渲染器的清除色(設置canvas背景色(clearColor)和背景色透明度(clearAlpha) )
renderer.setClearColor(0xFFFFFF, 1.0);
}
//設置相機
var camera;//定義一個全局變量的camera
//初始化相機設置
function initCamera() {
camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);//此處爲設置透視投影的相機,默認情況下,相機的上方向爲Y軸,右方向爲X軸,沿着Z軸垂直朝裏(視眼角:fov;縱橫比:aspect;相機離視最近的距離:near;相機離視體積最遠距離:far)
//設置相機的位置座標
camera.position.x = 0;
camera.position.y = 1000;
camera.position.z = 0;
//設置相機的上爲z軸方向
camera.up.x = 0;
camera.up.y = 0;
camera.up.z = 1;
//設置視野的中心座標
camera.lookAt({
x : 0,
y : 0,
z : 0
});
}
//設置場景
var scene;//定義全局變量scene(場景:一個三維空間)
//場景初始化設置
function initScene() {
scene = new THREE.Scene();
}
//設置光源
var light;//聲明全局變量
//初始化光源設置
function initLight() {
light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);//設置平行光(顏色,強度,方向),需設置position,從(0,0,0)到這個position的向量即是平行光的方向。
light.position.set(100, 100, 200);//光源的向量,即光源的位置
scene.add(light);//追加光源到場景
}
//設置物體對象
var cube;//定義全局變量cube
//初始化對象設置
function initObject() {
//實例化對象
var geometry = new THREE.Geometry();
//材質
var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors} );
//顏色
var color1 = new THREE.Color( 0x444444 ), color2 = new THREE.Color( 0xFF0000 );
// 線的材質可以由2點的顏色決定
var p1 = new THREE.Vector3( -100, 0, 100 );
var p2 = new THREE.Vector3( 100, 0, -100 );
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 render()
{
renderer.clear();
renderer.render(scene, camera);
requestAnimationFrame(render);
}
//主執行函數
function threeStart() {
initThree();
initCamera();
initScene();
initLight();
initObject();
render();
}
</script>
</head>
<body οnlοad="threeStart();">
<div id="canvas-frame"></div>
</body>
</html>
three.js的一些基本知識總結:
three.js文檔中渲染器的分支:
CanvasRenderer
DOMRenderer
SVGRenderer
WebGLRenderer
WebGLRendererTarget
WebGLRendererTargetCube
WebGLShaders
渲染器參數的介紹:
renderer = new THREE.WebGLRenderer({
antialias:true,// true/false表示是否開啓反鋸齒
precision:"highp",// highp/mediump/lowp 表示着色精度選擇
alpha:true,// true/false 表示是否可以設置背景色透明
premultipliedAlpha:false,// true/false 表示是否可以設置像素深度(用來度量圖像的分辨率)
stencil: false ,//false/true 表示是否使用模板字體或圖案
preserveDrawingBuffer:true,// true/false 表示是否保存繪圖緩衝
maxLights:1//最大燈光數
});
相機的介紹:
OpenGL中三維空間中的物體投影到二維空間的方式中存在透視投影和正投影兩種相機。
透視投影:從視點開始越近的物體越大、遠處的物體繪製的較小的一種方式
正投影:不管物體和視點的距離,都按統一的大小進行繪製
光源的介紹:
在OpenGL的三維空間中,存在點光源(存在平行光)和聚光燈兩種類型
three.js中可設置點光源(Point Light)、聚光燈(Spot Light)、平行光源(Direction Light),在一個場景中可以設置多個光源,通常都是環境光和其他幾種光源進行組合。
光源的總類有:
Light、AmbientLight、AreaLight、DirectionalLight、HemisphereLight、PointLight、SpotLight
總結:
Three.js的重構步驟:
1.設置three.js渲染器
步驟:
*1.聲明全局變量
*2.獲取畫布高度
*3.生成渲染器
*4.指定渲染器高度
*5.追加three.js生成的canvas元素到自定義的DOM元素中
*6.設置渲染器的清除色
2.設置相機camera
步驟:
*1.聲明全局變量
*2.設置透視投影相機/正投影相機
*3.設置相機的座標位置
*4.設置相機的上方爲z軸方向
*5.設置視野的中心座標
3.設置場景scene
4.設置光源light
步驟:
*1.聲明全局變量
*2.設置平行光源
*3.設置光源向量(光源的方向)
*4.追加光源到場景
5.設置物體object