图形学
向量值常用于表示力,位移,速度等物理量
单位向量:模为1
点积:
叉积:计算结果是向量
叉积只能用于3D向量,2D向量没有叉积。向量w同时垂直于u和v。
左手拇指定则(用于左手坐标系):指定w的方向
- 将拇指之外的4个手指指向第一个向量u的方向
- 向v的方向转动手指
将矩阵的每一行/列视为一个向量。
矩阵乘法:
结果矩阵C的第ij个元素的值等于A的第i个行向量和B的第j个列向量的点积
Cij=Ai,* ∙B*,j
由于在点积的计算中2个向量的维度必须相等,所以矩阵A的列数必须与矩阵B的行数相同
所以矩阵可以用结合律,不能用交换律
转置矩阵:行列交换
单位矩阵:
- 正方形矩阵
- 除了对角线上的元素为1外,其他元素均为0。
- 将一个矩阵与单位矩阵相乘,得到结果不会发生改变。单位矩阵可以被看成是矩阵中的数字1
矩阵行列式:用符号detA表示
- 将一个正方矩阵映射为一个实数
- 得到逆矩阵
-
余子式:删除了第i行和第j列后的(n − 1)×(n − 1)矩阵。
伴随矩阵:
对于1个正方形矩阵,用Cij=(−1)i+jdetA¯ij(代数余子式)代替对应的元素Aij,获得A的余子矩阵CA
-
对CA进行转置,得到A的伴随矩阵
逆矩阵:
只有正方形矩阵能做逆运算
- 不是所有的正方形矩阵都有逆矩阵。有逆矩阵的称为可逆矩阵,没有逆矩阵的称为单调矩阵。
- 如果存在逆矩阵,则唯一。
- 将一个矩阵与它的逆矩阵相乘,其结果必定为单位矩阵。矩阵与它的逆矩阵的相乘次序可以互换
- 对于小矩阵(4×4矩阵或更小)来说,使用伴随矩阵的方法更有效率。对于更大的矩阵来说,我们可以使用诸如高斯消元法的方法求逆矩阵。但是在3D计算机图形中,要处理的矩阵具有特定的形式,因此可以事先确定求逆矩阵的方程,这样我们就无需浪费CPU资源去求一般矩阵的逆矩阵了。
-
(AB)-1=B-1A-1
线性变换:
函数τ(v)= τ(x,y,z) = (xʹ,yʹ,zʹ)。这个函数的输入和输出都是一个3D向量。
- 满足
仿射变换:
- 线性变换加上平移向量 α(u)=τ(u)+b
组合变换:
- 有缩放矩阵S,旋转矩阵R,平移矩阵T。将这3个变换连续应用于立方体。
- 可以将SRT看成一个矩阵C,将所有的3个变换封装为一个净仿射变换矩阵。
- 注意支持结合律不支持交换律
坐标转换变换:
把将点或向量的坐标从一个参考系转换到另一个参考系
例如
- 物体可能在多个场景中重复使用,在局部坐标系中建立对象并存储坐标,通过坐标转换矩阵将物体从局部坐标系变换到不同的世界坐标系。
- 为了生成场景的2D图像,把一个局部坐标系(称为观察空间)附加在摄像机上,从世界空间到观察空间的坐标转换称为观察变换,相应的矩阵称为观察矩阵。
active变换可以和坐标转换相互转换。
Direct3D是一种底层绘图API,位于应用程序和绘图硬件之间。
组件对象模型(COM)技术使DirectX独立于任何编程语言,COM对象称为接口,并把它当成一个普通的C++类来使用。
2D纹理(texture)是一种数据元素矩阵,可以用于存储图像数据。
纹理可以被绑定到渲染管线(rendering pipeline)的不同阶段(stage)
显示:
- 两个缓冲区分别称为前台缓冲区和后台缓冲区。
- 前台缓冲区存储了当前显示在屏幕上的图像数据
- 在后台缓冲区中绘制动画的下一帧
-
当后台缓冲区的绘图工作完成之后,交换前台缓冲区的指针和后台缓冲区的指针。
深度缓冲区(depth buffer):
深度缓冲区中的每个元素与后台缓冲区中的每个像素一一对应
- 判定物体的哪些像素位于其他物体之前
因为计算机显示器上的像素分辨率有限,所以当我们绘制一条任意直线时,该直线很难精确地显示在屏幕上。
通过提高显示器的分辨率(缩小像素的尺寸),或者使用抗锯齿技术。
Direct3D支持多重采样的抗锯齿技术,它通过对一个像素的子像素进行采样计算出该像素的最终颜色,减弱阶梯效果,实现更平滑的图像。
例如4X多重采样(每个像素采样4个邻接像素)
一个像素与多边形的边缘相交,像素中心的绿颜色存储在可见的三个子像素中,而第4个子像素没有被多边形覆盖,因此不会被更新为绿色,对4个子像素(3个绿色和一个白色)取平均值,获得淡绿色。