OpenGL学习(三) GLSL语法与内建函数

GLSL,OpenGL Shading Language

(1)GLSL的修饰符与基本数据类型

const:用于声明非可写的编译时常量变量;

attribute:用于经常更改的信息,只能在顶点着色器中使用;

uniform:用于不经常更改的信息,可用于顶点着色器和片元着色器;

varying:用于修饰从顶点着色器向片元着色器传递的变量。

然后是基本数据类型,int、float、bool。注意float可以指定精度:

highp:32bit,一般用于顶点坐标(vertex coordinate);

medium:16bit,一般用于纹理坐标(texture coordinate);

lowp:8bit,一般用于颜色表示。

接下来是向量类型。四维向量:

attribute vec4 position;

矩阵类型:

uniform lowp mat4 colorMatrix;

纹理类型,一般仅在Fragment Shader中使用这个类型,二维纹理的声明方式如下:

uniform sampler2D texSampler;

最后是varing,用于在Vertex Shader和Fragment Shader中传递参数。首先在VS中声明这个类型的变量代表纹理的坐标点,并且对这个变量进行赋值,代码如下:

attribute vec2 texcoord;
varying vec2 v_texcoord;
void main(void)
{
    v_texcoord = texcoord;
}

紧接着在FS中也声明同名的变量,然后使用texture2D方法取出二维纹理中该纹理坐标点上的像素值,代码如下:

varying vec2 v_texcoord;

vec4 texel = texture2D(texSampler, v_texcoord);

取出了该坐标点上的像素值之后,就可以进行像素变化操作了,比如说提高对比度,最终将改变的像素值赋给gl_FragColor。

(2)GLSL的内置函数与内置变量

最常见的内置变量是两个Shader的输出变量,首先是VS的:

vec4 gl_position;

上述代码用来设置顶点转换到屏幕坐标的位置,VS一定要去更新这个数值。

float gl_pointSize;

在粒子效果的场景下,需要为粒子设置大小,改变该内置变量的值就是为了设置每一个粒子矩形的大小。

其次是FS的内置变量:

vec4 gl_FragColor;

上述代码用于指定当前纹理坐标所代表的像素点的最终颜色值。

猜你喜欢

转载自www.cnblogs.com/jiayayao/p/9446324.html
今日推荐