Three.js基礎(chǔ)探尋三——透視投影照相機(jī)

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ù)。

image
image

透視圖中,灰色的部分是視景體,是可能被渲染的物體所在的區(qū)域。

fov是視景體豎直方向上的張角(是角度制而非弧度制),如側(cè)視圖所示。

aspect等于width / height,是照相機(jī)水平方向和豎直方向長度的比值,通常設(shè)為Canvas的橫縱比例。

near和far分別是照相機(jī)到視景體最近、最遠(yuǎn)的距離,均為正值,且far應(yīng)大于near。

image

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>

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

image

其中,設(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,得到這樣的效果:

image

再改成600:

image

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

image

注意,改變fov并不會引起畫面橫豎比例的變化,而改變aspect則會改變橫豎比例。

next:立方體、平面、球體。

  整理自張雯莉《Three.js入門指南》

其他參考:Three.js-照相機(jī)

轉(zhuǎn)載https://www.cnblogs.com/xulei1992/p/5709677.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容