zhouqijie

第一部分:摄像机概述

计算机图形学中,虚拟摄像机可看作一个理想的焦点,并有一个虚拟感光表面称为成像矩形(imaging rect)悬浮在焦点的近距离前面。成像矩形由虚拟栅格组成,每个栅格对应一个像素。




第二部分:空间变换

更多详细内容可参考三维数学部分。

1.观察空间

观察空间(view space)又称为摄像机空间(camera space)。坐标原点是虚拟摄像机的焦点。

虚拟摄像机通常y轴向上,x轴向右,并面向观察空间中的+z轴(左手坐标系)或者-z轴(右手坐标系)。

利用观察空间到世界空间的变换矩阵能很容易求出摄像机的位置以及定向。

2.平截头体

摄像机能看到的范围称为观察体积(view volume)。观察体积是一个平截头体(Frustum),由6个面定义。

近平面(near plane)确保很近的面不被渲染。
远平面(far plane)确保很远的面不被渲染。

Jason: 近平面对应虚拟屏幕,上下左右四个面对应虚拟屏幕的边缘。

3.投影和齐次裁剪空间

透视和正交投影能把观察空间变换至一个称为齐次裁剪空间(homogeneous clip space)的坐标系。

OpenGL和DirectX的投影矩阵略有不同。因为z轴方向的范围不一样。(OpenGL时-1~1,DX是0~1)

齐次除法把齐次裁剪空间变换到标准化设备坐标(NDC)空间。

透视校正插值

属性插值是在屏幕空间进行的,应当把透视收缩的影响计算在内,称为透视校正插值(perspective-correct interpolation)。
基本原理就是插值属性需要除以对应的深度。推导略。

4.屏幕空间

屏幕空间是二维坐标系统,它的轴由屏幕像素来量度。

NDC坐标要缩放平移变换到屏幕空间才能渲染,称为屏幕映射(screen mapping)




第三部分:帧缓冲

帧缓冲:

最终渲染的影像会存储在名为帧缓冲(frame buffer)的颜色位图缓冲里。

多数显卡支持多种帧缓冲格式,但像素颜色通常以RGBA8888格式存储。

渲染引擎通常会维持至少两个帧缓冲,当显示硬件扫描一个帧缓冲时渲染引擎更新另一个帧缓冲。称为双缓冲技术。有些引擎会使用三缓冲技术,当硬件扫描一个缓冲时,引擎可以连续渲染其余两个缓冲区。

渲染目标:

任何供渲染引擎绘画图形的缓冲都称为渲染目标(render target)。除了帧缓冲外,还会使用很多种类的屏幕外(offscreen)渲染目标。包括深度缓冲(depth buffer)、模板缓冲(stencil buffer),以及其他用来存储中间渲染结果的缓冲。

CRE:Unity中摄像机的渲染目标可以是RenderTexture。即把结果渲染至一张RenderTexture纹理。