OpenGL es 2.0 glsl 将一张图片作为输入纹理,如果纹理中存在绿色,将绿色设置为透明,写出顶点着色器和片元着色器,分别说明着色器中参数的取值范围
时间: 2023-02-08 12:22:01 浏览: 188
先进的编程-programming -- principles and practice using c++ second edition 英文 第2版 epub转pdf
顶点着色器:
```
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main() {
gl_Position = a_position;
v_texCoord = a_texCoord;
}
```
顶点着色器中 `a_position` 是顶点坐标, 取值范围是[-1.0, 1.0];`a_texCoord` 是纹理坐标, 取值范围是[0.0, 1.0]
片元着色器:
```
precision mediump float;
uniform sampler2D u_sampler;
varying vec2 v_texCoord;
void main() {
vec4 color = texture2D(u_sampler, v_texCoord);
if(color.g == 1.0) {
color.a = 0.0;
}
gl_FragColor = color;
}
```
片元着色器中 `u_sampler` 是输入纹理, 取值范围是纹理中的像素值; `v_texCoord` 是顶点着色器中传递过来的纹理坐标;通过 `texture2D` 函数获取纹理像素, `gl_FragColor` 是片元的颜色。这个片段着色器里的输入的纹理像素的值范围为 [0,1], 是根据输入的纹理图片的像素来决定的。
阅读全文