所谓摄像机,不过是一个矩阵而已。所有的变换,都只是对这个矩阵的变换,在计算机图形学中并没有真正意义上的"相机"。
讨论摄像机/观察空间(Camera/View Space)时,我们实际上是在讨论以摄像机视角作为场景原点时场景中所有顶点的坐标。观察矩阵(View Matrix)负责将所有世界坐标变换为相对于摄像机位置与方向的观察坐标。

要构建相机矩阵,通常需要以下前提条件:
相机的移动实际上是通过改变观察矩阵来实现的。例如,鼠标移动时,我们会根据鼠标的前后变化位置计算各个向量分量,最后应用于观察矩阵的变化。

在计算机图形学中,lookAt矩阵和view矩阵都用于定义摄像机的位置和方向,但它们在实现方式上有所不同。
lookAt矩阵用于将世界坐标系中的点转换到摄像机坐标系中。它通常由三个参数来定义:
lookAt矩阵的计算步骤:
lookAt矩阵view矩阵,也称为摄像机矩阵或观察矩阵,通常指将世界坐标系中的点转换到摄像机坐标系中的矩阵。
在某些上下文中,view矩阵可能与lookAt矩阵相同,但在其他情况下,view矩阵可能包括更广泛的摄像机设置,如视野(field of view)、纵横比(aspect ratio)和近远裁剪平面(near and far clipping planes)。
总的来说,lookAt矩阵是创建view矩阵的一种特定方法,它专注于摄像机的位置和朝向。在某些实现中,这两个术语可能会互换使用,但在更严格的计算机图形学定义中,view矩阵可能包含lookAt矩阵以外的其他摄像机参数。
除了观察矩阵,相机还涉及投影矩阵,用于将3D场景投影到2D屏幕上。主要有两种投影方式:
投影矩阵与观察矩阵结合,最终决定了场景中物体在屏幕上的显示方式。
你所认识的世界,都是对世界的抽象,有时候很难分清抽象与事物本身的关系。
在Three.js中,相机主要分为两类:
PerspectiveCamera:透视相机,模拟人眼视觉OrthographicCamera:正交相机,不考虑透视效果Three.js内部通过计算viewMatrix和projectionMatrix实现相机功能。