高级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工程