1.Z-Buffer(深度缓存)
初始将每个像素深度设置为无穷,依次遍历每个三角形所覆盖的像素区域,若该区域的像素距离小于原本记录的,则更新距离为更近的,复杂度o(n)
2.着色(shading)
环境光着色只考虑局部,不考虑是否有物体挡住光源
3.漫反射
光线被均匀反射到各个方向
反射光线强度与夹角余弦成正比
能接受到的光线能量和距离的平方关系,I表示光源初始能量
漫反射得到的光线能量,表示该镜面反射系数,若为1表示平面光滑不吸收能量,为0则表示全部吸收不反射,平面有颜色也是因为吸收了光线,
也可以是三维向量表示红绿蓝三通道的RGB值,以此定义一种颜色
4.高光
半程向量h与法线向量n比较接近时(即观察方向与镜面反射方向接近)能接收到高光,
为什么有指数p:不加指数,对夹角偏移容忍度太高,一般认为只有恨接近才能算高光
指数p越大,高光范围越小,k越大高光越亮
5.着色模型
Blinn-Phong反射模型=环境光+漫反射+高光
6.着色频率
左边这个每个面着色一次(Flat shading),中间顶点着色一次(Gouraud shading),右边每个像素着色一次(Pong shading),从左到右,着色频率升高
由下图可知,当面足够多、模型够复杂时,逐面着色效果和逐像素着色差不多,如果图形足够复杂,面已经超过像素数,Flat shading开销可能会更大
7.求顶点法线
将各平面法线求平均,也可以根据三角形面积加权平均更合理