查看: 5090|回复: 1

GLSL教程(3) 片元处理

[复制链接]
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-6-2 00:09:42 | 显示全部楼层 |阅读模式
    大意:片元着色器与顶点着色器一样,完全替掉渲染管线的同样操作。输入为图元组装和栅格化的结果,输出为光栅化准备,也无权操作帧缓存。
    GLSL教程

    译:FreeSouth
    片元处理



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

    该用户从未签到

    发表于 2010-12-6 23:57:18 | 显示全部楼层
    片元着色器也可以使用OpenGL状态,这一点与顶点着色器相同,因此它可以处理雾效。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表