实现纹理贴图
- 在vertex shader中添加纹理坐标的变量:attribute vec2 texcoord,因为需要纹理坐标才能实现纹理贴图;还要添加一个varying变量,因为这个texcoord是从vertex shader中传进来,到fragment shader中使用的,而fragment shader中没有attribute这种类型的变量,所以把texcoord在vertex shader中通过varying类型的变量传到fragment shader中,具体方法是:在main函数中直接赋值就可以
attribute vec2 texcoord;
varying vec2 V_Texcoord;
void main()
{
V_Texcoord = texcoord;
}
- 在fragment shader中添加纹理采样器:uniform sampler2D U_Texture,我们把纹理传进来之后,就是用他来采样纹理。再声明纹理坐标:varying vec2 V_Texcoord。最后gl_FragColor叠加上纹理的颜色,这样颜色不仅受它自身颜色的影响还受纹理颜色的影响。获取纹理颜色的方法是调用opengl shader中的内置函数texture2D(),第一个参数传纹理采样器,第二个参数传纹理坐标。
uniform sampler2D U_Texture;
varying vec2 V_Texcoord;
void main()
{
gl_FragColor = V_Color * texture2D(U_Texture, V_Texcoord);
}
- 在主代码中