什么是纹理?
用作OpenGLES纹理的图像纹理是一个用来保存图像的颜色元素值的OpenGLES缓存。纹理可以使用任何图像,例如树木、动物等。当把纹理应用到几何图形中,会使渲染的场景个怪自然。
在纹理的缓存中保存的颜色值可能要耗费很多的内存,所有的嵌入式系统都为纹理设定了内存的最大尺寸。但是,由于嵌入式系统的可用内存相对较小,应尽量使用最小的图像来产生可以接受的渲染结果。
纹素:当用一个图像初始化一个纹理缓存后,在这个图像中的每个像素变成了纹理中的一个纹素。与像素类似,纹素保存颜色数据。像素和纹素之间的差别很微妙,像素通常表示计算机屏幕上的一个实际的颜色点。与此相反,纹素存在于一个虚拟的没有尺寸的数学坐标系中。
OpenGLES纹理坐标系纹理坐标系有是一个有S、T两个轴的2D坐标系,在一个纹理中无论有多少个纹素,纹理的尺寸在S、T轴上都是从0到1。例如一个图像高1宽64,那么在纹理坐标系上是在T轴上有一个纹素,在S轴上有64个纹素。
在OpenGL中还有1D、3D纹理。
映射
在渲染时,GPU会转换纯数学OpenGL ES坐标系中的每个顶点的x、Y、Z坐标为帧缓存区中所对应的真实像素位置。帧缓存中的像素位置叫做视口。
在每个顶点的X、Y、Z坐标被转换成视口坐标后,GPU会设置转换生成的三角形内的每个像素的颜色。转换几何形状数据为帧缓存中的颜色像素的渲染步骤点阵化。每个颜色像素叫做片元。当OpenGL ES没有使用纹理时,GPU会根据包含该片元的对象的顶点的颜色来计算每个片元的颜色。当设置了使用纹理后,GPU会根据当前绑定的纹理缓存中的纹素来计算每个片元的颜色。
程序要指定怎么对齐纹理和顶点,以便让GPU知道每个片元的颜色由哪些纹素决定。这个对齐叫做映射,是通过扩展为每个顶点保存的数据来实现的。除了X、Y、Z坐标,每个顶点还给出了U和V坐标值。每个U坐标会映射顶点在视口中的最终位置到纹理中的沿着S轴的一个位置。V坐标映射到T轴。
MIP贴图
MIP贴图是一个为纹理存储多个细节级别的技术。高细节的纹理会沿着S轴和T轴存储很多的纹素。低细节的纹理沿着每个轴存储很少的纹素。最低细节的纹理只保存一个纹素。多个细节级别增加了S、T轴上的纹素和每个片元的U、V坐标直接紧密的对应关系的可能性。当存在一个紧密的对应关系时,GPU会减少纹素的数量,进而会减少内存访问的次数。使用MIP贴图通常会通过减少GPU取样的数量来提高渲染的性能,但是MIP贴图使每个纹理所需要的内存增加了1/3.
常见API介绍
1、改变像素存储方式
2、从颜色缓冲区内容作为像素图直接读取
3、载入纹理
4、更新纹理
5、使用颜色缓冲区加载数据,形成新的纹理使用
6.纹理对象
7.纹理参数
8.环绕方式
网友评论