5.透視投影照相機(jī)構(gòu)造函數(shù)
透視投影照相機(jī)(Perspective Camera)的構(gòu)造函數(shù)是:
THREE.PerspectiveCamera(fov, aspect, near, far)
- fov 可視角度
- aspect 實(shí)際窗口的縱橫比
- near 近處的裁面的距離
- far 遠(yuǎn)處的裁面的距離
只有離相機(jī)的距離大于near值,小于far值,且在相機(jī)的可視角度之內(nèi),才能被相機(jī)投影到。
讓我們通過幾張透視照相機(jī)投影的圖詳細(xì)了解這些參數(shù)。


透視圖中,灰色的部分是視景體,是可能被渲染的物體所在的區(qū)域。
fov是視景體豎直方向上的張角(是角度制而非弧度制),如側(cè)視圖所示。
aspect等于width / height,是照相機(jī)水平方向和豎直方向長度的比值,通常設(shè)為Canvas的橫縱比例。
near和far分別是照相機(jī)到視景體最近、最遠(yuǎn)的距離,均為正值,且far應(yīng)大于near。

6.透視投影照相機(jī)實(shí)例
源碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>3.js測試三</title>
</head>
<body onload="init()">
<canvas id="mainCanvas" width="400px" height="300px" ></canvas>
<script type="text/javascript" src="js/three.min.js"></script>
<script type="text/javascript">
function init() { var renderer = new THREE.WebGLRenderer({
canvas: document.getElementById('mainCanvas')
});
renderer.setClearColor(0x000000); // 場景
var scene = new THREE.Scene(); // 透視投影照相機(jī)
var camera = new THREE.PerspectiveCamera(45, 400 / 300, 1, 10);
camera.position.set(0, 0, 5);
scene.add(camera); // 邊長為一的正方體
var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 1, 1), new THREE.MeshBasicMaterial({
color: 0xff0000,
wireframe: true })
);
scene.add(cube); // 渲染
renderer.render(scene, camera);
} </script>
</body>
</html>
[
](javascript:void(0); "復(fù)制代碼")

其中,設(shè)置透視投影照相機(jī),這里canvas長400px,寬300px,所以aspect設(shè)為400 / 300:
var camera = new THREE.PerspectiveCamera(45, 400 / 300, 1, 10);
camera.position.set(0, 0, 5);
scene.add(camera);
對比正交投影,透視投影可以看到全部的12條邊,而且有近大遠(yuǎn)小的效果。
**7.豎直張角 **
將視角fov由45改為60,得到這樣的效果:

再改成600:

將照相機(jī)的豎直張角設(shè)置得更大時,視景體變大了,因而正方體相對于整個視景體的大小就變小了,看起來正方形就顯得變小了。 正方體的實(shí)際大小并未改變。

注意,改變fov并不會引起畫面橫豎比例的變化,而改變aspect則會改變橫豎比例。
next:立方體、平面、球體。
整理自張雯莉《Three.js入門指南》
其他參考:Three.js-照相機(jī)