(五)OpenGL着色器

什么是着色器

1、glsl:在GPU上运行的程序,是可编程的,OpenGL Shading Language,主要分为两个部分顶点着色器以及片源着色器;

2、attribute:用于各个顶点各不相同的量,如顶点颜色、顶点坐标。只能在顶点着色器中使用;

3、uniform:用于对3D物体中所有顶点都相同的量,例如光源位置,统一变换矩阵。不能被修改,由外部传递进来;

4、varying:表示易变量,用于顶点着色器传递到片元着色器的量;

5、gl_Position:属常用内建变量,顶点的位置,在顶点着色器中使用,四维向量;

6、gl_FragColor:属常用内建变量,顶点颜色,在片元着色器中使用,四维向量;

7、texture2D:属常用内建变量,获取纹理某个位置的纹理,第一个参数是纹理句柄,第二个是纹理位置;

编译着色器

1、获取着色器路径,着色器就是一个program,需要在bundle里面加载资源;

2、创建可执行程序,获取着色器内容,加入、编译、附着、链接、执行;

image.png
image2.png
image3.png

着色器工作流程

1、基于顶点的操作

顶点着色器处理顶点,每个顶点由空间矩阵变换,有效地将其3D坐标系统改变为新的坐标系统。就像摄影相机将3D风景转换成2D照片一样

2、图元装配

以指定的顺序连接顶点构建基本体状态

3、图元处理

屏幕外面的任何图元都被剪辑并在下一阶段忽略

4、栅格化

测试像素是否在图元的边内。如果他们不是,他们被丢弃。如果他们在图元内,他们被带到下一个阶段。通过测试的像素集被称为片段

5、片面处理

将颜色或纹理应用到片段内的像素

6、基于片段的操作

片段被提交到几个测试,如:透明度(Alpha)测试,模板(Stencil)测试,深度(Depth)测试等

结果

像素被保存在帧缓存(Framebuffer)中,更具体地,保存在Default-Framebuffer中。这些是你在移动设备屏幕上看到的像素

你可能感兴趣的:((五)OpenGL着色器)