OSG论坛管理员 发表于 2009-6-2 00:09:42

GLSL教程(3) 片元处理

大意:片元着色器与顶点着色器一样,完全替掉渲染管线的同样操作。输入为图元组装和栅格化的结果,输出为光栅化准备,也无权操作帧缓存。
GLSL教程
译:FreeSouth
片元处理


片元着色器(fragment shader)在片元处理阶段运行。这个阶段可以做的操作如下:
        --为每个象素计算颜色、纹理坐标
        --纹理应用
        --雾化
        --计算法线
该阶段的输入信息为经过插值形成的顶点位置,颜色,法线等信息。
在顶点着色器(vertex shader)中,是为每一个顶点计算这些值,现在我们要处理图元里的片元信息,所以需要插值后的输入。
像顶点着色器一样,当你写一个片元着色器时,会替代渲染管线中的相应阶段。因为也不要只写个着色器来处理纹理片元而期望渲染管线完成雾化部分。片元着色器必须完成片元的纹理计算和着色阶段的所有工作。
片元着色器只关注一个片元,他不会处理同周边的片元什么复杂的关系等等。片元着色器也可以使用OpenGL状态,这一点与顶点着色器相同,因此它可以处理雾效。
一个非常重要的点就是片元不可以改变纹理的坐标,纹理的坐标是在顶点处理阶段利用模式矩阵和投影矩阵变换来来的。视口会在顶点处理器之后被确定,但是是在片元着色器之前,所以片元着色器可以为某位置象素化,但是却不能改变其位置。
片元着色器有两个输出操作:
        --因为废了渲染流程中的片元处理操作,因为什么也没有输出
        --片元颜色gl_FragColor(最终的片元颜色),或者为多重目标而输出的片元数据gl_FragData.
深度也可以在这个阶段指定,当然这也不是必须的,因为上个阶段已经计算了深度。
注意,片元着色器也无权操作帧缓存,这说明,混合操作(blending)只有在下一阶段才可完成。

原文地址:http://www.lighthouse3d.com/opengl/glsl/index.php?fragmentp

CR苏杭 发表于 2010-12-6 23:57:18

片元着色器也可以使用OpenGL状态,这一点与顶点着色器相同,因此它可以处理雾效。
页: [1]
查看完整版本: GLSL教程(3) 片元处理