在几何处理阶段时,先渲染一次场景,获得几何信息,并存储在G缓冲中,然后再使用G缓冲中的几何信息进行光照计算
在光照处理阶段时,首先渲染屏幕大小的方形,然后使用G缓冲中的数据计算每个场景的光照,最终光照计算和之前一样
G缓冲缺点是且并不支持混色,不能使用MSAA,优点是高效
G缓冲需要3D向量,漫反射,法向量,镜面反射强度,光源的位置和颜色,camera的位置
想修改这些缺点,需要结合延迟渲染和正向渲染,需要复制在几何着色器中的深度缓冲然后进行光源立方体渲染
有更多的光源时,需要计算光所能达到的最大范围,所以只需要对在光源片段中的像素进行光照运算即可
GLfloat constant = 1.0;
GLfloat linear = 0.7;
GLfloat quadratic = 1.8;
GLfloat lightMax = std::fmaxf(std::fmaxf(lightColor.r, lightColor.g), ightColor.b);
GLfloat radius = (-linear + std::sqrtf(linear * linear - 4 * quadratic * (constant - (256.0 / 5.0) * lightMax))) / (2 * quadratic);