3种修饰类型uniform
、attribute
、varying
uniform
从外部传递到顶点和片元着色器里面的变量
gluniform..
uniform
要传进顶点/片元着色器,就需要在顶点/片元着色器中进行一样的声明
uniform
平时可以传视图矩阵、投影矩阵、投影视图矩阵
uniform mat4 viewProMatrix;
然后用gluniform..
相对应的api
进行传递
attribute
它的特点就是从我们的客户端传递到顶点着色器,只能传递到顶点着色器,片元着色器是不使用attribute
属性的。它是用来修饰顶点、纹理坐标、颜色、法线等于坐标颜色有关的属性
glVertex...
调用相关api
先打开开关,再设置合适的方式从buffer里面读取数据->将顶点数据copy到顶点缓存区中(GPU显存中)
//顶点坐标数据
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLfloat *)NULL + 0);
//纹理坐标数据
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLfloat *)NULL + 3);
attribute vec4 position;
attribute vec4 color;
attribute vec2 texCoord;
varying
纹理坐标是无法传递到片元着色器的,就需要传递到顶点着色器,使用varying
进行桥接
varying
就是把attribute
间接的传递到片元着色器使用的修饰符
//这句代码需要在顶点着色器和片元着色器做相同的声明,这样我们的片元着色器就能够拿到纹理坐标的值
varying lowp vec2 varyTextCoord;
网友评论