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 }
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 }
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 }
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 }