GLSL 着色器相关

一、顶点着色器

顶点着色器,根据应用程序的设计,只是选择处理:

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后已经废除了,OGL3.1删除了)。

6)scissortest,裁剪测试。

7)alpha测试(OGL 3.1后删除了,并用片段着色器替代)。

8)模板测试。

9)深度测试,是基于像素上才能应用深度测试,视口变换后写入glDepthRange是顶点级别还不能确定)

10)alpha混合,blend操作,当前drawcall得到的颜色和原来在后台颜色缓存区中的颜色混合,混合后会在临时缓存会再写入后台颜色缓存,默认写入时GL_COPY。

11)对像素进行逻辑操作,glLogicOP默认是GL_COPY.

12)颜色值的抖动,混合周边的颜色,使得颜色更加丰富些,一般现代硬件都不需要,OGLES上还是需要的默认开启。

13)颜色掩码操作glColorMask, 模板和深度缓存也是有Mask的。

 

来自 <http://blog.csdn.net/blues1021/article/details/53168185>

 

 

 

 

 

Lambertian 着色法

L=kdImax(0,nl)

L 是像素颜色, kd 是散射系数, I 是光照强度, n l 是光源方向和法向量的单位向量。

Blinn-Phong 着色法

L=kdImax(0,nl)+ksImax(0,nh)p

h 是半角向量,ks 是高亮系数,p为Phong指数

Ambient 着色法

L=kaIa+kdImax(0,nl)+ksImax(0,nh)n

ka 是环境系数,Ia 是环境光照强度

多点光源

光有一个非常有用的性质——叠加性,可以得到多点光源下的计算公式:

L=kaIa+∑i=1n[kdIimax(0,nli)+ksIimax(0,nhi)p]

 

来自 <http://blog.csdn.net/qq_33274326/article/details/54607173>

GLSL(OpenGL Shading Language)着色器是一种编程语言,用于定义在图形渲染管道中执行的图形着色和计算操作。它是基于C语言的,并且专门用于编写图形处理单元(GPU)的程序。GLSL着色器可以用于控制光照、纹理映射、阴影效果等,以实现各种复杂的图形效果。 Cesium是一个用于创建基于Web的地球和地理应用程序的JavaScript库。它提供了强大的地理功能和可视化效果,可以在Web浏览器中实现高质量的地球模拟和地理数据可视化。Cesium使用GLSL着色器来处理地图、地形和其他元素的渲染。通过修改着色器代码,我们可以自定义图层的着色器,达到我们想要的图层风格和效果。在Cesium中,可以通过访问着色器源代码并进行相应的修改来实现这一目的。 引用的内容说明了如何在Cesium中修改图层的着色器代码,从而实现自定义的图层效果。通过获取图层对应的片源着色器源代码,并使用字符串的replace函数来替换其中的代码,我们可以修改GLSL着色器代码,达到我们想要的效果。这样,我们就可以自定义图层的渲染样式和效果,使其符合我们的需求。 总结起来,GLSL着色器是一种用于定义图形渲染操作的编程语言,而Cesium是一个基于Web的地球和地理应用程序的JavaScript库,它使用GLSL着色器来处理地图和地理元素的渲染。通过修改着色器代码,我们可以自定义图层的着色器,实现自定义的图层效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值