three学习(二十六)——相机

647 阅读2分钟

前言

前面讲解例子时我们就直接创建了一个相机,相机的种类特点也没有介绍,本节我们就来介绍下three中的相机对象。

相机

Camera相机是three中重要的组件,通过相机我们才能将渲染的物体展示出来,并且提供了特定的视角与范围。three中常见的相机类型有三种,下面我们依次来看。

PerspectiveCamera

PerspectiveCamera: 透视投影相机,远小近大,模拟人的视角,所以我们一般将相机设置为该种类型。three中很多命名都是根据自身运用的算法和效果命名的,相机也不例外,那么什么是透视投影呢? 透视投影的原理就是上面提到的远小近大将远离观察者的物体缩小,近于观察者的物体放大,以此来模拟物体之间的距离感。画作上一般也运用此技巧来增加真实感,而现实中我们眼睛看到的亦是如此效果。three中透视投影相机构造函数:

   PerspectiveCamera( fov, aspect, near, far)
   // fov -- 垂直角度比
   // aspect -- 相机视角锥的长宽比
   // near -- 视角锥近端面
   // far -- 远端面

上述参数都跟视角锥有关,这个视角锥就有点像聚光灯源点了,看了下面效果图很容易理解: image.png

//创建相机 长宽比一般为可视范围
const width = window.innerWidth; 
const height = window.innerHeight;
const camera = new THREE.PerspectiveCamera(30, width / height, 1, 800);

OrthographicCamera

OrthographicCamera: 正交投影相机,展示出来的物体大小跟距离无关,跟角度相关,一般用于2D游戏等场景。该相机用的是正投影的方式,正投影就像数学上的正视图,它会将物体的线条进行平行投影。

image.png

对应的构造函数:

   OrthographicCamera( left, right, top, bottom, near, far)
    // left -- 相机视角左侧
    // right -- 右侧
    // top -- 上侧
    // bottom -- 下侧
    // near -- 近端 默认0.1
    // far -- 远端 默认1000

参数都为方位,相当于从立方体的六个面去观察物体。

const width = window.innerWidth;
const height = window.innerHeight;
const a = width / height;
const b = 100;
//创建对象
const camera = new THREE.OrthographicCamera(a * -b, a * b, b, -b, 1);
camera.position.set(100, 150, 100); //设置位置
scene.add(camera);

CubeCamera

CubeCamera: 立方体相机,它能够在某个位置拍六张照片,然后组合成一个立方体纹理,我们实现天空盒等效果时需要用到它。该相机构造函数如下:

   THREE.CubeCamera( near, far, renderTarget)
   //near far跟前面一样
   //renderTarget 渲染目标对象 

renderTarget可以由WebGLCubeRenderTarget创建出来。

const cubeRenderTarget = new THREE.WebGLCubeRenderTarget(128);
const cubeCamera = new THREE.CubeCamera(1, 1000, cubeRenderTarget);
scene.add(cubeCamera);

总结

以上就是three中常用的三种相机,每个相机也都继承于Camera,每种相机都有自己的使用场景,这点我们要清楚。