本来是准备学习有关 光照和阴影算法 的,然后发现都是用shader做的。虽然做游戏有一段时间,主要接触的也是图形学部分,在OpenGL下工作,也就没有学shader了。
几个月前看过那个<GPU编程之阳春白雪与下里巴人>,但没有实践过,但也算稍微有个了解。
这次学习,主要以PowerVR的示例为教程。它有一个帮助手册<Migration from OpenGL ES 1.x to OpenGL ES 2.0 API.1.1f.External>,里面作了shader使用的说明,这是可以跟它的示例程序印证的。前面说的那本书,更全面和偏理论一点,没有相关示例进行验证。
第一课 Hello World:
个人整理之后觉得可以如此划分:
1: 初始化OpenGL ES.
2: Load/Compile/Link Vert/Frag shader program.
3: Creat/Use shader program
4: Gen buffer(for vertex data)
5: Render Loop.
将在shader程序里面用到的参数传进去,如projection model view matrix, vertex pos, uv, color等。
vert shader 与 frag shader 传参. 例如光照的计算,在vert shader里面用PMVMatrix点乘顶点normal,再点乘光的方向,得出本顶点光照的强度,然后在frag shader里面用这个去乘颜色值.
draw array.
这里有几个名词:
Uniforms:程序用它把原始数据传递给shader。主要是比如world view projection matrix, light direction, material等,它在这一段数据渲染过程中是不变的.
Attributes: 用来传递顶点有关的数据,如pos, normal, uv等,它随顶点的不同而不同,这是跟Uniform的差别所在。
Varyings: 用来把数据从vertex shader传递到fragment shader.