OpenGL ES 纹理绘制

纹理绘制就是纹理映射,这里有个术语 纹素 ,不是用像素来表示纹理对象中的显示元素,主要是为了强调纹理对象的应用方式。纹理对象通常是通过纹理图片读取到的,这个数据保存到一个二维数组中,这个数组中的元素称为纹素(texel),纹素包含颜色值和alpha值。

纹理填充绘制 WRAP参数

纹理的绘制方式:

  • GL_REPEAT
  • GL_MIRRORED_REPEAT
  • GL_CLAMP_TO_EDGE
  • GL_CLAMP_TO_BORDER

纹理详细的介绍,参考:
二维纹理映射

绘制颠倒的问题

为什么会存在绘制颠倒的问题呢 ?

"坐标系"

纹理坐标系(uv)是右手坐标系,屏幕坐标又是左手坐标系;所以在屏幕中显示的点,需要在脚本之前或处理中进行y翻转。

解决方案:

  • 在VBO顶点坐标上进行Y的处理(1-y)
  • 在顶点着色器中进行Y翻转 gl_Position = vec4(position.x, -position.y,position.z, 1.0);
  • 翻转纹理的Y轴坐标 vTexcoord = vec2(texcoord.x,1.0-texcoord.y);

绘制比例问题

UIImageView的contentMode经常使用的有3种:

  • scaleToFill
  • scaleAspectFit
  • scaleAspectFill

我们需要使用比例处理:
添加 < AVFoundation Framework >

CGRect realRect = AVMakeRectWithAspectRatioInsideRect(image.size,   self.view.bounds);

图像简单处理

学会使用绘制纹理后,就可以使用脚本处理自定义的一些效果。

  • 灰度处理
  • 简答模糊处理
  • 简单的颜色映射,LUT滤镜

Demo地址:openGL-ES 2

你可能感兴趣的:(OpenGL ES 纹理绘制)