threejs - 2 - 相机

2018-04-07  本文已影响729人  大批

:)


简介

常见的相机有两类:透视相机正交相机


透视相机

透视相机在ThreeJs里面对应的类是THREE.PerspectiveCamera,这个类需要4个参数:视角、近平面距离、远平面距离、宽高比。如果在加上相机的位置和相机照相的方向(lookAt)就可以在三维空间中唯一确定一个空间,出现在这个空间的物体最后就会被渲染出来(近大远小)。

图片来自网络

正交相机

正交相机在ThreeJs里面对应的类是THREE.OrthographicCamera,这个类需要6个参数:左边偏移(偏移是相对于相机中心位置,不是坐标),右偏移,上偏移,下偏移,近平面距离、远平面距离。当然这个相机也是需要一个位置和lookAt方向的


相机demo

在原点添加一个立方体,使用不同的相机观察

    var scene = new THREE.Scene();
    /**
     * 视角 : 45度
     * 宽高比 : window.innerWidth / window.innerHeight
     * 近平面距离 : 1
     * 远平面距离 : 1000
     */
    var camera = new THREE.PerspectiveCamera(45,window.innerWidth / window.innerHeight,1,1000);
    camera.position.set(10,10,10); // 相机的位置
    camera.lookAt(0,0,0); // 相机看着的方向

    /**
     * OrthographicCamera( left, right, top, bottom, near, far )
     * 这里的 20 不是坐标  是偏移量哈
     * 这里添加了一个比例,如果相机的宽度个高度的比例和渲染的比例对不上,最后渲染出来就会变形
     */
    var acspet = window.innerWidth / window.innerHeight;
    var camera1 = new THREE.OrthographicCamera(-5 * acspet,5 * acspet ,5,-5,1,100);
    camera1.position.set(10,10,10);
    camera1.lookAt(0,0,0);

    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth,window.innerHeight);

    var box = new THREE.Mesh(
        new THREE.BoxGeometry(2,2,2),
        new THREE.MeshBasicMaterial({
            color: 0xffff00,wireframe:true
        })
    );
    box.position.set(0,0,0);
    scene.add(box);

    document.getElementById("content").appendChild(renderer.domElement);
    // 这里切换不同的相机
    renderer.render(scene,camera1);
透视相机 正交相机

主要的相机就这两种:正交相机透视相机


相机辅助线

有时候我们想看看相机的可视范围,这时候就需要添加一些辅助线帮助我们创建设置相机参数。使用的是THREE.CameraHelper这个类需要注意的是需要事先将相机对象添加到场景中

场景中可以有多个相机,不同的相机有不同的视角,最后使用不同的视角渲染出来的效果就不同。还有一个意识需要建立起来,就是 camera 和 renderer是独立的,不同的不同的renderer渲染到的dom不同,不同的camera角度不同可以结合起来使用


End

上一篇下一篇

猜你喜欢

热点阅读