Three.js基礎探尋三——透視投影照相機


  本篇主要介紹Three.js照相機中的透視投影照相機。

  上一篇:正交投影照相機

 

5.透視投影照相機構造函數

  透視投影照相機(Perspective Camera)的構造函數是:

THREE.PerspectiveCamera(fov, aspect, near, far) 

   - fov 可視角度 
   - aspect 實際窗口的縱橫比 
   - near 近處的裁面的距離
   - far 遠處的裁面的距離 


  只有離相機的距離大於near值,小於far值,且在相機的可視角度之內,才能被相機投影到。

  讓我們通過幾張透視照相機投影的圖詳細了解這些參數。

 

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

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

  aspect等於width / height,是照相機水平方向和豎直方向長度的比值,通常設為Canvas的橫縱比例。

  near和far分別是照相機到視景體最近、最遠的距離,均為正值,且far應大於near。

 

 

6.透視投影照相機實例

  源碼:

<!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();

                // 透視投影照相機
                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>        

  其中,設置透視投影照相機,這里canvas長400px,寬300px,所以aspect設為400 / 300:

var camera = new THREE.PerspectiveCamera(45, 400 / 300, 1, 10);

camera.position.set(0, 0, 5);

scene.add(camera);

  對比正交投影,透視投影可以看到全部的12條邊,而且有近大遠小的效果。

 

7.豎直張角 

  將視角fov由45改為60,得到這樣的效果:

  再改成600:

  將照相機的豎直張角設置得更大時,視景體變大了,因而正方體相對於整個視景體的大小就變小了,看起來正方形就顯得變小了。 正方體的實際大小並未改變。

 

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

  next:立方體、平面、球體

 

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

  其他參考:Three.js-照相機

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM