高级GLSL(2)

撰写于 2016-07-11 修改于 2018-01-29 分类 OpenGL 标签 高级OpenGL

接口块

随着我们的程序做的越来越大,着色器程序也会变得很复杂,着色器程序的输入输出变量需要更好的组织管理,不能再零散的分布,而且变量类型也需要扩展,数组和结构体也要利用起来,这就用到了接口块(Interface Blocks)。示例:
顶点着色器

1
2
3
4
5
6
7
8
9
10
out VS_OUT
{
vec3 Normal;
vec3 Position;
} vs_out;
void main()
{
vs_out.Normal = mat3(transpose(inverse(model))) * normal;
vs_out.Position = vec3(model * vec4(position, 1.0f));
}

片段着色器

1
2
3
4
5
6
7
8
9
10
11
12
in VS_OUT
{
vec3 Normal;
vec3 Position;
} vs_in;
void main()
{
float ratio = 1.00 / 1.52;
vec3 I = normalize(vs_in.Position - cameraPos);
vec3 R = refract(I, normalize(vs_in.Normal), ratio);
color = texture(skybox, R);
}

跨着色器互传接口块时,接口块的名字一定要相同。(以后会有用处吧)


参考教程:https://learnopengl-cn.github.io/
学习交流:我的OpenGL工程

Site by ZHJ using Hexo & Random