OpenGL

0011--GLSL语言学习(一)

2020-07-29  本文已影响0人  清风烈酒2157

前言

OpenGL ES 的渲染管线包含有一个可编程的顶点阶段的一个可编程的片段阶段。其余的阶段则有固定的功能,应用程序对其行为的控制非常有限。每个可编程阶段中编译单元的集合组成了一个着色器。在OpenGL ES 中,每个着色器只支持一个编译单元。着色程序则是一整套编译好并链接在一起的着色器的集合。着色器 shader 的编写需要使用着色语言 GL Shader Language(GLSL)GLSL 的语法与 C语言很类似.

image.png

规则

习惯上,我们一般把顶点着色器命名为 xx.vsh,片段着色器命名为 xx.fsh

文件中尽量少使用汉字注释防止编译错误.

GLSL 写出的着色器:

一个简单顶点着色器和片元着色器代码

.vsh

attribute vec4 position;
attribute vec4 color;
varying vec4 colorVarying;
vec4 myVec4 = vec4(1.0);
void main(void){
    colorVarying = color;
    gl_Position = position;
}

.fsh

varying lowp vec4 colorVarying;
void main (void){
    gl_FragColor = colorVarying;
}


gl_Position:顶点着色器的输出属性-变换后的顶点的位置,用于后面的固定的裁剪等操作。所有的顶点着色器都必须写这个值。在顶点着色器中必须要设置

gl_FragColor:片元着色器中的输出属性-每个像素点的颜色值。在片元着色器中必须要设置

变量

变量类别 变量类型 描述
void 用于无返回值的函数或空的参数列表
标量 float, int, bool 浮点型,整型,布尔型的标量数据类型
浮点型向量 float, vec2, vec3, vec4 包含1,2,3,4个元素的浮点型向量
整数型向量 int, ivec2, ivec3, ivec4 包含1,2,3,4个元素的整型向量
布尔型向量 bool, bvec2, bvec3, bvec4 包含1,2,3,4个元素的布尔型向量
矩阵 mat2, mat3, mat4 尺寸为2x2,3x3,4x4的浮点型矩阵
纹理句柄 sampler2D, samplerCube 表示2D,立方体纹理的句柄

GLSL中没有指针类型.

对于变量运算,GLSL中有非常严格的规则,即只有类型一致时,变量才能完成赋值或其它对应的操作。可以通过对应的构造器来实现类型转换

标量

标量对应 C语言的基础数据类型,它的构造和C语言一致,如下:

float myfloat = 1.0;
float mybool = true;
float myfloat = float(mybool);
float mybool = bool(myfloat);

向量

构造向量时,向量构造器中的各参数将会被转换成相同的类型(浮点型整型布尔型)。往向量构造器中传递参数有两种形式:

向量构造器用法如下:

vec4 myVec4 = vec4(1.0); // myVec4 = {1.0, 1.0, 1.0, 1.0}
vec3 myVec3 = vec3(1.0,0.0,0.5); //myVec3 = {1.0, 0.0, 0.5}
vec3 temp = vec3(myVec3); // temp =myVec3= {1.0, 0.0, 0.5}

vec2 myVec2 = vec2(myVec3);//myVec2 = {myVec3.x, myVec3.y}
myVec4 = vec4(myVec2,temp,0.0); //myVec4 = {myVec2.x, myVec2.y , temp, 0.0 }

矩阵

矩阵数据类型:

image.png

注:一般使用3x3、4x4的方阵 – mat3、mat4

修饰符

修饰符:

image.png
上一篇下一篇

猜你喜欢

热点阅读