在之前的一系列博客中, 介绍了OpenGLES相关的着色器Shader, 顶点及图形绘制:
[iOS — OpenGLES之简单的图形绘制()]http://icetime17.github.io/2016/01/03/2016-01/iOS-OpenGLES之简单的图形绘制/)
那么, 接下来将进入图片纹理Texture的部分. 这里, 我们首先使用OpenGLES的方式绘制一张图片到屏幕上.
Shader脚本
Vertex Shader如下:
attribute vec4 Position;
attribute vec2 TextureCoords;
varying vec2 TextureCoordsOut;
void main(void)
{
gl_Position = Position;
TextureCoordsOut = TextureCoords;
}
其中, Position依然是顶点坐标, 即将要绘制到OpenGLES坐标系上的位置.
TextureCoords是纹理坐标, 即将要把图片纹理的哪一个像素点绘制出来.
Fragment Shader如下:
precision mediump float;
uniform sampler2D Texture;
varying vec2 TextureCoordsOut;
void main(void)
{
vec4 mask = texture2D(Texture, TextureCoordsOut);
gl_FragColor = vec4(mask.rgb, 1.0);
}
TextureCoordsOut是接收Vertex Shader中的TextureCoords变量的值.
参数Texture是图片纹理的来源, 使用texture2D(Texture, TextureCoordsOut);可获取对应纹理坐标点上的颜色.
将该颜色传递给gl_FragColor即可绘制出来图片在该纹理坐标点上的颜色.
关联Shader参数
_glProgram = [ShaderOperations compileShaders:@"DemoDrawImageTextureVertex" shaderFragment:@"DemoDrawImageTextureFragment"];
glUseProgram(_glProgram);
// 需要三个参数, 跟Shader中的一一对应。
// Position: 将颜色放置在CAEAGLLayer上的哪个位置
// Texture: 图像的纹理
// TextureCoords: 图像的纹理坐标,即图像纹理的哪一块颜色
_positionSlot = glGetAttribLocation(_glProgram,