纹理绘制就是纹理映射,这里有个术语 纹素 ,不是用像素来表示纹理对象中的显示元素,主要是为了强调纹理对象的应用方式。纹理对象通常是通过纹理图片读取到的,这个数据保存到一个二维数组中,这个数组中的元素称为纹素(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滤镜