GLSL写vertex shader和fragment shader

0.一般来说vertex shader处理顶点坐标,然后向后传输,经过光栅化之后,传给fragment shader,其负责颜色、纹理、光照等等。

前者处理之后变成裁剪坐标系(三维),光栅化之后一般认为变成二维的设备坐标系

1.每个顶点有多个属性时的顶点着色器:

 1 #version 330 core
 2 layout (location = 0) in vec3 aPos;
 3 layout (location = 1) in vec3 aColor;
 4 layout (location = 2) in vec2 aTexCoord;
 5 
 6 out vec3 ourColor;
 7 out vec2 TexCoord;
 8 
 9 void main()
10 {
11     gl_Position = vec4(aPos, 1.0);
12     ourColor = aColor;
13     TexCoord = aTexCoord;
14 }
View Code

2.只处理纹理的片元着色器:

 1 #version 330 core
 2 out vec4 FragColor;
 3 
 4 in vec3 ourColor;
 5 in vec2 TexCoord;
 6 
 7 uniform sampler2D ourTexture;
 8 
 9 void main()
10 {
11     FragColor = texture(ourTexture, TexCoord);
12 }
View Code

3.将2中的纹理添加之后再加入顶点的颜色,片元着色器咋写呢:

 1 #version 330 core
 2 out vec4 FragColor;
 3 
 4 in vec3 ourColor;
 5 in vec2 TexCoord;
 6 
 7 uniform sampler2D ourTexture;
 8 
 9 void main()
10 {
11     FragColor = texture(ourTexture, TexCoord);
12     FragColor = texture(ourTexture, TexCoord) * vec4(ourColor, 1.0);
13 }
View Code

4.渲染多个纹理咋办呢?

 1 #version 330 core
 2 ...
 3 
 4 uniform sampler2D texture1;
 5 uniform sampler2D texture2;
 6 
 7 void main()
 8 {
 9     FragColor = mix(texture(texture1, TexCoord), texture(texture2, TexCoord), 0.2);
10 }
View Code

猜你喜欢

转载自www.cnblogs.com/guopinghai/p/9817847.html
今日推荐