卜若的代码笔记-webgl系列-第十三章:glsl探索(一)$glsl基础$
1 顶点shader:VertexShader主要功能
1.1使用模型视图以及投影矩阵进行顶点变换
1.2 法线变换及归一化
1.3 纹理坐标生成和变换
1.4 逐顶点或者逐像素光照计算
1.5 颜色计算
需要注意的是,顶点处理器在没有被指定之前呢,是属于固定管线的范畴,一旦你指定了相关的顶点处理器之后呢,就意味着,必须按照顶点处理器的处理来干活了
2片元着色器fragmentShader
2.1 组像素计算颜色和纹理坐标
2.2 应用纹理
2.3 雾化计算
2.4 逐像素光照,计算法线
GLSL本质上是一种语言,无论你在怎么骚,还是一种语言。数据结构是必须的!!!!!!!!!!!!!
数据类型:
vec3 v3 = vec3(1,2,3)//显然,这是一个顶点数据结构
float f = v3.x //显然这是一个浮点类型
vec2 v2 = v3.xy//这种写法叫做混合 = vec2(v3.x,v3.y)swizzing
mat4 m4 = mat4(1,2,3,4,5,6,7,8,2,2,3,4,5,6,7,8)//矩阵类型
float m23 = m4[2][3]//获取矩阵的某些值
float floatArray[4]//声明含有4个浮点元素的数组
vec4 vec4Array[2]//声明含有两个vec4对象的数组
int i = 5;//整形类型
unitform sampler2D samlper//取样器,存在两种类型sampler2D 和 samplerCube
//唯一能够赋值给取样变量的就是纹理单元编号,而且必须使用Webgl的方法gl.uniform1i(u_Smapler,0);
函数声明规范:c语言规范
内置函数:
存储限定字
通常情况下,使用三种限定符:attribute,varing,uniform来进行限定
当然有时候,我们使用const限定字,表示着色器中的某个变量
unitform:全局,只读,除了数组或者结构体之外的任意变量,如果顶点着色器VertexShader和片元着色器FragmentShader中生命了同名的uniform变量,那么它就会被两种着色器共享。
varing:全局,任务是从顶点着色器向片元着色器传输数据,我们必须在两种的着色器中声明同名,同类型的varing变量。
它的类型只能是以下类型:float,vec2,vec3,vec4,mat2,ma