iOS --- OpenGLES之图片纹理

在之前的一系列博客中, 介绍了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, 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值