1. 程式人生 > >我們來學一學threejs的相機。深度學習,瞭解!

我們來學一學threejs的相機。深度學習,瞭解!

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>threejs之相機</title>
        <script src="../js/three.js"></script>
    </head>

    <body>
        <!--    相機
        相機定義了場景中哪部分是可以見的,相機有自己的位置(position)、朝向(lookAt)和可視域。我們建立的圖形一定要放在相機的可視域中才能看得見。可視域與相機的型別、相機的位置和朝向都有關。
        -->

        <!--
        
        正交相機
        正交相機拍攝的效果類似設計圖,重在表現物體的實際尺寸,沒有近小遠大的效果:
        
        OrthographicCamera( left, right, top, bottom, near, far )
        
        
        
        透視相機拍攝的效果類似人眼所見,即有近小遠大的效果:
        
        PerspectiveCamera( fov, aspect, near, far )
        
        
        -->

        <canvas id="cc"></canvas>

        <script type="text/javascript">
            // 建立一個場景,它將儲存我們所有的元素,如物體、照相機和燈光。
            var scene = new THREE.Scene();

            // 建立一個攝像機,它定義了我們所處的位置.
            var fov = 45,aspect = window.innerWidth / window.innerHeight,near = 0.1,far = 1000;
            
            //fov引數指定視角,aspect指定檢視寬高比,後兩個引數指定近平面和遠平面。透視相機的視域是一個臺體:
            var camera1 = new THREE.PerspectiveCamera(fov, aspect, near, far);//透視相機
            
        
            
            var frustumSize = 400
            var aspect = window.innerWidth / window.innerHeight;
                camera2 = new THREE.OrthographicCamera( frustumSize * aspect / - 2, frustumSize * aspect / 2, frustumSize / 2, frustumSize / - 2, .1, 100 );
                //這個六個引數即是指定視域的左右上下近遠六個範圍。正交相機的視域是立方體
                camera2.position.set(30,0,25);

            // 建立渲染並設定大小 指定渲染canvas物件
            var renderer = new THREE.WebGLRenderer({
                canvas: document.querySelector("#cc")
            });

            renderer.setClearColor(0xEEEEEE);
            renderer.setSize(window.innerWidth, window.innerHeight);

            //建立一個xyz座標軸,方便初學者理解三維座標
            var axes = new THREE.AxesHelper(20);
            scene.add(axes);

            //建立網格模型
            
            var sphereGeometry = new THREE.CubeGeometry(10, 20, 20);//我們就建立個立方體。
            var material = new THREE.MeshBasicMaterial  ({color:Math.random()*0xffffff})//基礎材質
            var cube = new THREE.Mesh(sphereGeometry,material)
            
            scene.add(cube)
            
            
            

        
            //設定相機位置
            camera1.position.set(-30,40,30);
        
            camera1.lookAt(scene.position);
            
    

            // 執行一次渲染器,GPU渲染成影象,繪製到canvas裡面呈現
            
            const draw = function(){
                requestAnimationFrame(draw)//不斷繪製
                renderer.render(scene, camera1);//透視相機渲染
                //renderer.render(scene, camera2);//正交相機渲染
                
                cube.rotation.y+=0.01//網格模型旋轉
            }
            draw()
        </script>
    </body>

</html>