根据我的理解,片段着色器从光栅化中获取结果。但是,根据计算机图形学:原理与实践(第3版),光栅化将根据各个方向的光照计算片段颜色:
for each pixel position (x, y):
closest[x, y] = ∞
for each triangle T:
for each pixel position (x, y):
let R be the ray through (x, y) from the eye
let P be the intersection of R and T
if P exists:
sum = 0
for each direction:
sum += . . .
if the distance to P is less than closest[x, y]:
pixel[x, y] = sum
closest[x, y] = |P − O|
因此片段颜色像素[x,y]是根据场景中的照明计算的。因此,在此之后,片段着色器将为每个片段应用颜色,纹理等。片段着色器或纹理中的颜色如何与从光栅化计算的颜色混合?
答案 0 :(得分:1)
片段着色器是你实现的光栅化过程,描述的光栅化是由固定管道中的着色器完成的,灵活的管道使用你提供的着色器程序。
来自opengl文档: 片段着色器是Shader阶段,它将由栅格化生成的片段处理为一组颜色和一个深度值。
片段着色器是光栅化基元后的OpenGL管道阶段。对于由基元覆盖的像素的每个样本,生成“片段”。每个片段都有一个窗口空间位置,一些其他值,它包含上一个顶点处理阶段的所有内插每顶点输出值。
片段着色器的输出是深度值,可能的模板值(未经片段着色器修改),以及可能写入当前帧缓冲区中缓冲区的零个或多个颜色值。
如果未提供片段着色器,片段中像素的颜色将保持不变
答案 1 :(得分:1)
您的理解是正确的,光栅化后会出现阴影。
光栅化和输出合并(混合)之间的可编程步骤。光栅化内插(非平坦)每个顶点属性,并使用它计算的值生成一个或多个每个片段的样本。
在光栅化期间计算的值被传递到片段着色器阶段,该阶段决定如何处理它们(例如,在特定坐标处采样纹理)以产生颜色和深度。在着色之后,根据设置混合方程,通过深度/模板测试的片段与帧缓冲区中已存在的片段合并(混合)以生成像素。