上一篇我们介绍了OpenGL基础相关的知识:OpenGL图形绘制和OpenGL入门,今天介绍一下OpenGL另一重要的成员----OpenGL着色器。
什么是OpenGL着色器?
Open GL ES 着色器语言是一种高级的图形编辑语言,主要特性有一下几点:
- OpenGL ES着色器语言是一种高级的过程语言
- 对顶点着色器,片元着色器使用的是同样的语言,不做区分
- 基于C/C++的语法及流程控制
- 完美支持向量与矩阵的各种操作
- 拥有大量的内置函数来提供丰富的功能
OpenGL关键技术点
-
着色器是使用一种叫GLSL的类C语言写成的
-
着色器的结构:
- 版本声明:#version version_number
- 变量:in type xxx; out type xxx; uniform type xxx;
- main函数
-
顶点差色器的输入为顶点属性(Vertex Attribute):
- 一般情况的上线为16个包含4分量的顶点属性
- 与硬件有关,通过GL_MAX_VERTEX_ATTRIBS查询:glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
-
着色器语言除C的基本数据类型外,还包含向量(Vector)和矩阵(Matrix)
- Vector相关的api:
- 访问4个属性:vec.x, vec.y, vec.z, vec.w
- 重组:vec2, vec3, vec4
- Vector相关的api:
-
GLSL输入与输出:
- 两个着色器之间,输入和输出的类型和名称一样,就会自动匹配 —- 与顺序无关
- 顶点着色器的输入:通过layout来指定输入变量
- 片段着色器的输出:vec4颜色输出变量,指定片段最终的颜色
-
GLSL的uniform:
- 作用:CPU直接向GPU的着色器发送数据的方式
- uniform是全局唯一
- 着色器里的定义:uniform type xxx;
- opengl代码设置uniform的值:
- 获取地址:glGetUniformLocation(shaderProgram, “uniform名称”)
- 使用着色器程序后,设置值:
- glUseProgram(shaderProgram);
- glUniform4f(location, 0.0f, greenValue, 0.0f, 1.0f);
-
改变三角形颜色的方法:
- 通过uniform传值给片段着色器
- 顶点数据里,添加颜色数据,再通过顶点着色器传给片段着色器
-
注意:片段着色器每次处理一个顶点,而不是一个图形
好了,至此,有关OpenGL着色器的基本概念和常用方法基本介绍完毕,在下一篇,我会详细的介绍OpenGL着色器更加高深的知识。如果你对作色器还是不够了解,可以参考我下面的地址,官网有很详细的介绍。
参考
创作不易,如果觉得我的博客对你有帮助,不防给我一颗小红心吧。