摄像机的设置
随着摄像机的位置,姿态不同,对同一场景中拍摄的画面也不同
投影
根据应用程序的投影矩阵,管线中会确定一个可视区域,叫做视景体(只在这个空间的物体才能看到,不在这视景体中的被截裁掉了)
光照(定位光,传递光源位置给顶点着色器)
环境光
散射光(与 光源位置,顶点位置,顶点法向量 有关)
方案:
设置求出
光源位置,顶点位置 和 顶点法向量后一并传入 顶点着色器
在顶点着色器内求出变换矩阵后的法向量并规格化,
在顶点着色器内求出光源到变换矩阵后的表面的向量并规格化
然后运用上述散射光强度公式,求出要传给片元着色器的光照强度
镜面光(与 摄像机位置,光源位置,顶点位置,顶点法向量 有关)
方案:
求半向量:首先将v和L规格化,然后将规格化后的v与L求和再次规格化后即求得半向量
设置求出
摄像机位置,光源位置,顶点位置 和 顶点法向量后一并传入 顶点着色器
在顶点着色器内求出变换矩阵后的法向量并规格化,在顶点着色器内求出摄像机到变换矩阵后的表面的向量并规格化 Veye
在顶点着色器内求出光源到变换矩阵后的表面的向量并规格化 Vp
用Veye+Vp规格化后求出 半向量
设置粗糙度
然后运用上述镜面光强度公式,求出要传给片元着色器的光照强度
3种光的结合
将环境光,散射光,镜面光三者的光强度分别求得然后最后相加到一起
即将3种光结合起来
(定向光,传递光源方向给顶点着色器)
在顶点着色器直接规格化光源方向即可得出vp
(注意之前的定位光,是要将光源位置和3D物体表面来求出光方向向量,这里直接用光方向求出)
vec3 vp= normalize(lightDirection); //规格化定向光方向向量
其他环境光,散射光,镜面光三者的光强度的求解类似之前