GLSL基础概念和用法

本文介绍了GLSL的基础概念,包括顶点着色器和片断着色器的使用,详细讲解了Shader Object对象与Shader Program程序的创建过程,并探讨了如何处理Shader数据及与应用程序的交互,最后通过实例代码展示了GLSL的实践应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图形图像顶点和片段像素的渲染,只能用固定管线或可编程着色器任何一种进行处理。无论是顶点还是片段都是只能处理固定管线中整个顶点或片段中的可以丰富自定义的部分,其它顶点或像素处理还是用硬件固定管线进行。

一、顶点着色器

顶点着色器,根据应用程序的设计,只是选择处理:
1.视觉空间变换(模型,法线,纹理).
2.主颜色和辅助颜色的计算生成(光照在摄像机坐标系中进行实时光照计算).
3.纹理坐标计算。
4.雾坐标设置和处理。
5.点大小。

新的顶点着色器或者支持更多的处理。并不是顶点管线的所有操作都可以用顶点着色器替代,下面的一些操作仍然是由固定管线处理:
1)透视除法。硬件实现。
2)视口映射变换。硬件实现。
3)图元装配,在4D裁剪空间中,进行视锥裁剪之前进行。
4)平截头体(视景体)和用户裁剪。
5)背面剔除,视口变换后,光栅化之前进行。
6)双面光照选择。
7)多边形模式处理。(可能是指凹凸模式,着色模式,三角带三角网格模式).
8)多边形偏移,在图元装配阶段进行偏移。
9)深度范围截取,glDepthRange设置后,固定管线内的实现代码进行设置。

顶点着色器,引入的更多实时光照计算,可控制的图形顶点变换效果(从CPU端移动到GPU端),纹理变换,雾,点大小设置可以有效的控制GPU Shader来实现;且其它的OpenGL状态设置,例如背面剔除,多次渲染Pass状态等更加方便的统一到Shader中进行设置。

二、片断着色器(像素着色器)

片段着色器之前,还进行了光栅化插值操作,也是硬件实现的。
片段着色器可以处理的操作是:
1.提取纹理单元,用于纹理贴图。
2.纹理应用。
3.雾.
4.主颜色和辅助颜色汇合。
不论是否使用片断着色器,OGL固定管线都要执行下面的操作:
1)单调或平滑着色(控制片断之间的插值,还需要一层内部过渡处理的)。
2)像素覆盖计算。根据圆形像素点大小,覆盖到的方形像素格子的大小。
3)像素所有权测试. 像素位置是不是当前OGL context实例所有,被其它OGL实例窗口遮挡了则不是
4)裁剪操作。像素级别还是要进行裁剪的,用户设置的scissor裁剪。
5)点画模式应用(实线虚线,OGL 3.0后已经废除了,OGL 3.1删除了)。
6)scissor test,裁剪测试。
7)alpha测试(OGL 3.1后删除了,并用片段着色器替代)。
8)模板测试。
9)深度测试,是基于像素上才能应用深度测试,视口变换后写入glDepthRange是顶点级别还不能确定)
10)alpha混合,blend操作,当前drawcall得到的颜色和原来在后台颜色缓存区中的颜色混合,混合后会在临时缓存会再写入后台颜色缓存,默认写入时GL_COPY。
11)对像素进行逻辑操作,glLogicOP默认是GL_COPY.
12)颜色值的抖动,混合周边的颜色,使得颜色更加丰富些,一般现代硬件都不需要,OGLES上还是需要的 默认开启。
13)颜色掩码操作glColorMask, 模板和深度缓存也是有Mask的。

片段着色器通过代码控制纹理提取和复杂的纹理动画,多重纹理映射,颜色组合,雾设置,颜色组合(纹理着色后和光照辅助颜色汇合),模板操作,alpha测试等很多都可以在片段着色器中处理了,和各种状态的统一设置。片段着色器承载的更多图像效果的实现。

三、GLSL程序逻辑

Shader 源码可以共用 Shader Object对象实现的功能,故需要链接。 </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值