|
|
@@ -1,7 +1,7 @@
|
|
|
<!--
|
|
|
* @Author: your name
|
|
|
* @Date: 2021-10-01 11:33:27
|
|
|
- * @LastEditTime: 2022-02-22 01:07:45
|
|
|
+ * @LastEditTime: 2022-02-23 01:17:38
|
|
|
* @LastEditors: Please set LastEditors
|
|
|
* @Description: In User Settings Edit
|
|
|
* @FilePath: D:\MarkdownLog\图形学.md
|
|
|
@@ -1102,7 +1102,101 @@ MSAA解决的对信号的模糊操作,只不过MSAA最后的出来的值也可
|
|
|
|
|
|
## 深度缓冲
|
|
|
|
|
|
+很多三角形叠在一起的时候,怎么处理?
|
|
|
|
|
|
+要让离摄像机近的物体遮挡远处物体,通过深度缓冲,也叫Z-Buffer
|
|
|
+
|
|
|
+1. 画家算法
|
|
|
+
|
|
|
+先画远处的面,再画近处的面,一层一层的覆盖
|
|
|
+
|
|
|
+需要先对所有的三角形面片进行排序,时间复杂度 $O(n\log _2n)$
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+画家算法无法解决这种互相遮挡的关系
|
|
|
+
|
|
|
+2. Z-Buffer
|
|
|
+
|
|
|
+对单独的三角形面片无法排序,那么直接对单个像素进行处理,保证单个像素所存的是其看到的几何物体的最浅的深度信息,即**深度图**,**深度缓存**
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+左边为渲染出的图片,右边为深度图
|
|
|
+
|
|
|
+> 深度图中,越近越黑,越远越白
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+图中每个格子表示一个像素,先来了个一个三角形深度都是5,R表示无限大,则5比无限大小,可以覆盖;然后来了个新的三角形,根据深度信息进行覆盖操作
|
|
|
+
|
|
|
+一般而言,n个三角形,每个三角形覆盖常数个像素,那么最终时间复杂度只是$O(n)$
|
|
|
+
|
|
|
+## 着色
|
|
|
+
|
|
|
+shading,引入物体的明暗的不同,颜色的不同,**对不同的物体应用不同的材质的过程**
|
|
|
+
|
|
|
+### Blinn-Phong反射模型
|
|
|
+
|
|
|
+- 反射
|
|
|
+ - 高光
|
|
|
+ - 漫反射
|
|
|
+ - 间接光照
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+- 定义
|
|
|
+ - 在局部,比较小的范围内,物体表面是一个平面(无论物体长什么样)
|
|
|
+ - 定义垂直于平面的法线n
|
|
|
+ - 摄像机的观察方向v
|
|
|
+ - 看向光源的方向l
|
|
|
+ - 颜色color
|
|
|
+ - 光的亮度 shininess
|
|
|
+
|
|
|
+> 所有的方向都是单位向量,只表示方向
|
|
|
+
|
|
|
+#### 漫反射
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+> 暂且只讨论某一个点的着色,也就是只考虑光照的方向,而不考虑照向这个点的光是不是被挡住了
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+同一束光照,当紫色物体旋转时,其单位面积接收到的光变少,导致其变暗
|
|
|
+
|
|
|
+任何一个着色点周围单位面积能接受到多少光照,与光线的角度成一定关系,从而引出Lambert's定律:接受到的光照与l和n的余弦(上图中的 $\cos \theta$)成正比
|
|
|
+
|
|
|
+> 带入现实,一个是太阳能板,被照射面积越大热得越快;一个是四季,夏天是被太阳光直射
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+对于一个光源,某一瞬间,其发出的能量是固定的,而伴随着光线的传递,其蕴含的能量也逐渐分散(球壳,而不是圆形)
|
|
|
+
|
|
|
+此时定义距离为1是,光线强度为**I**,当距离为r,则光纤强度为 $\frac{I}{r^2}$,通过这个式子可以算出当前传播到着色点的光照强度
|
|
|
+
|
|
|
+通过上面两个公式,可以得到着色点(Shading Point)的光照强度、多少光会打在着色点上,得到计算式子
|
|
|
+
|
|
|
+$$
|
|
|
+L_d = k_d(I/r^2)max(0, n \cdot l)
|
|
|
+$$
|
|
|
+
|
|
|
+- 上面的数学表达式就是**漫反射**的表示方法
|
|
|
+ - $k_d$漫反射的系数,表示这个点吸收多少能量(类似物体吸收所有颜色就是黑色,不吸收所有颜色就是白色的物理规律)
|
|
|
+ - $I/r^2$ 到达着色点的能量
|
|
|
+ - $max(0, n \cdot l)$ 接收了多少能量
|
|
|
+
|
|
|
+> 为什么是$max(0, n \cdot l)$ ,$n \cdot l$也就是$\cos \theta$可能为负数,因为光线可能从物体下面往上发射,而这种光不具备物理意义(这里只讨论发射,不讨论折射)
|
|
|
+
|
|
|
+漫反射的物理规律就是看一个物体无论从什么角度看都是一样的,而上面的$L_d$式子刚好与观察方向v没有任何关系
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+通过前面的解释,可以清楚的了解为什么这个球是渐变的,从亮变灰再变黑
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+通过定义$k_d$颜色系数,可以定义该物体整体上的明暗
|
|
|
|
|
|
# 几何
|
|
|
|