深度缓冲器算法
因为我们看的是-z,z小的反而远。
现在我们简化一下,深度永远是正的,因此深度高的距离远,(z小),我们不看z现在,就探讨深度(距离)
先看深度缓存的示例:(左边实际,右边深度图)
具体实现:
越大的越深
着色
对不同的物体使用不同的材质就是着色
定义一些参数,N法线,V观测方向,L光照方向(都是单位向量)color颜色,shininess表示有发亮材质有多亮(是物体表面,不是亮度):
点光源
距离越远能量会越低。(能量守恒),你单次能量大小固定的,但是球壳的表面积越来越大,所以单位面积的能量也是在降低的。
定义当前点能量为I,那r位置的能量就是I/(r^2)(理想);
Blinn–Phong模型
max(0,n·l)就是n·l不能小于零,Ld是反射出去的能量
高光
h是半程向量
高光往往是镜面反射导致的,看到高光就是我们看的方式和镜面反射方向接近的时候就会出现。
当我们我们也可以看出,如接近高光区,那也就意味着半程向量和平面法向量十分的接近,如图所示(高光就相当于折射角,是被法向量平分的)
也就是说我们看不看得到高光可以看他的半程向量是否和法向量接近。
为什么要有个p次方呢,是因为余弦变化的太慢了,加上指数可以缩小高光的范围,也变得敏感(正常p记作100+)
环境光
环境光特别复杂,所有我们做出一个假设,所有点的环境光的大小是一样的。
境光和方向什么的都没关系,可以理解为一个常数,(待深入)
环境光+漫反射光+高光项
公式