1 相机类的关系
graph TD
Object3D --> Camera
Camera --> PerspectiveCamera
Camera --> OrthographicCamera
常用设置api
camera.position() 设置相机所在的位置
camera.up() 设置相机的方向,改变方向,产生相机旋转; default: (0,1,0)
camera.lookat() 相机看向的位置
关于相机与世界坐标以及相机各个参数之间的关系,我是这样理解的:举个例子来说,我们要用手机拍一个物体,比如香蕉,那么我们会怎么做?首先是不是得把手机拿起来放到某个位置上去,你得拿你的手固定住手机才能拍出照片,对吧,这就对应是camera的三个position属性(位置)。其次,当你把手机放到那个位置上后,你要拍到香蕉,你是不是得把手机对准那个香蕉,不然你手机虽然在那个位置,但你向上,向下随便翻动手机,可能会拍到香蕉吗?当然不会,所以对准香蕉这个操作就对应camera的 looAt() 操作。最后,你手机也摆好了,香蕉也对准了,但你是不是还得考虑到底是横着拍还是竖着拍,或者斜着拍?因为你手机横着或者竖着拍出来的香蕉是不同的,所以你手机到底是横着还是竖着对应的就是camera的up属性,这个up指的就是你手机向上的方向。当这三个因素被确定下来后,相机才能够被确定,从而拍出确定的照片,“确定”这个条件对计算机是非常重要的,因为不确定的东西对计算机来说是无法被理解的,所以也就不可能被计算机呈现。参考链接:blog.csdn.net/weixin_4337…
2 PerspectiveCamera 透视相机
使用场景:模拟人眼看到的场景--近大远小
var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
PerspectiveCamera( fov : Number, aspect : Number, near : Number, far : Number )
fov — 摄像机视锥体垂直视野角度\ default:50
aspect — 摄像机视锥体长宽比\ default:1 -> 通常使用画布的宽/画布的高
near — 摄像机视锥体近端面\ default:0.1
far — 摄像机视锥体远端面 default:2000
3 OrthographicCamera 正交相机
使用场景:渲染2D场景或者UI元素, 保持渲染物体的大小不变
var camera = new THREE.OrthographicCamera( width / - 2, width / 2, height / 2, height / - 2, 1, 1000 );
OrthographicCamera( left : Number, right : Number, top : Number, bottom : Number, near : Number, far : Number )
left — 摄像机视锥体左侧面。\
right — 摄像机视锥体右侧面。\
top — 摄像机视锥体上侧面。\
bottom — 摄像机视锥体下侧面。\
near — 摄像机视锥体近端面。\ default:0.1
far — 摄像机视锥体远端面。 default:2000
4 视锥体
视锥指的是一个实体形状,看起来像是一个顶部被平行于地基切除的金字塔
实验有助于解释这个情况的成因。
想象拿着一根直棍子(比如扫帚把手或者铅笔)的一端对着相机并拍照。如果棍子正对着照片的中心,垂直于相机镜片,那么相机上只会看到一个圆;除了棍子的断点其它部分会被遮挡。如果将棍子向上移,慢慢能看见棍子的远端,但是将棍子向上翘起又会将远端隐藏起来。继续向上移动并向上调整棍子角度,圆形的断电最终会到达照片的边缘。在这个点上,现实世界中所有在棍子所在线上方的物体在照片中都不会出现。
棍子也可以简单的像左、右、下或者水平垂直移动的任意组合。相应调整棍子的角度都可以将棍子在相机中隐藏起来。
这个思考实验的意义在于,相机图片中的任何一个点最终对应于现实世界中的一条线,并且只会显示这条线上的一个点,这条线上所有在这个显示的点后面的物体都会被遮挡。图片的外边界由四个顶点对应的发散线定义。这四条线最终相交于相机位置所在的点。Unity中这个点就是相机的transform位置,被称为透视视图的中心。屏幕顶部和底部中心点汇集到透视视图中心点的连线形成的角度被称为视野(field of view FOV)。
如上面介绍的,所有落在照片边界对应的发散线以外的事物在相机上是不可见的,同时还有两外两个限制。远近裁切平面平行于相机的XY平面,分别在相机的中心线上设置了一个确定的距离。所有于相机的距离小于近平面的距离或者大于远平面的距离的物体都不会被渲染。
图片定点对应的发射线和两个裁切平面一起定义了一个截断的金字塔,也就是视锥。
参考链接:blog.csdn.net/asasqwqw121…
以上仅为记录个人学习理解。