OpenGL ES学习笔记(三):纹理相关概念
2016-10-12 本文已影响268人
Theodore_Pratt
纹理映射到转换后的顶点
纹理
- 概念:纹理是一个用来保存图像颜色元素值的OpenGL ES缓存。
应该尽量使用最小的图像来产生可以接受的渲染结果,因为嵌入式系统的可用内存相对较小
纹素(texel)
- 概念:当用一个图像初始化一个纹理缓存后,在这个图像中的每个像素变成了纹理中的一个纹素。
- 纹素保存颜色数据
- 纹素存在于一个虚拟的没有尺寸的数学坐标系中
纹理坐标系有一个命名为S何T的2D轴。在一个纹理中无论有多少纹素,纹理的尺寸永远是S、T上从0.0-1.0。从一个1像素高64像素宽的图像初始化来的纹理会沿着整个T轴有1纹素,沿着S轴有64纹素。
像素
- 概念:像素通常表示计算机屏幕上的一个实际的颜色点
视口(viewport)
- 概念:在渲染时,GPU会转换纯数学OpenGL ES坐标系中的每个顶点的X、Y、Z坐标为帧缓存中所对应的真实像素位置,而这个像素位置就叫做视口。
顶点坐标被转换为视口坐标后,GPU会设置转换生成的三角形内的每个像素的颜色
点阵化/光栅化(rasterizing)
- 概念:转换几何形状数据为帧缓存中的颜色像素的渲染步骤叫做点阵化。
片元(fragment)
- 概念:光栅化得到的每个颜色像素叫做片元。
映射(mapping)
- 概念:程序需要指定怎么对齐纹理和顶点,以便让GPU知道每个片元的颜色由哪些纹素决定,这个对齐就叫做映射。
取样(sampling)
- 概念:每个顶点的U和V坐标会附加到每个顶点在视口坐标中的最终位置。然后GPU会根据计算出来的每个片元的U、V位置从绑定的纹理中选择纹素。这个选择过程就叫做取样。
glTexParameteri()函数:
- 解释:配置每个绑定的纹理,使OpenGL ES知道怎么处理可用纹素的数量与需要被着色的片元的数量之间的不匹配。
- 配置不同的取样模式参数:
- GL_TEXTURE_MIN_FILTER:存在多个可用纹素对应一个片元时配置取样。
- GL_TEXTURE_MAG_FILTER:没有足够的可用纹素唯一性的映射一个或者多个纹素到每个片元上时配置取样。
- GL_NEAREST:邻近差值取样模式
- GL_LINEAR:线性内插法取样
- 指定当U、V坐标小于0/大于1时的参数
- GL_TEXTURE_WRAP_S:S轴
- GL_TEXTURE_WRAP_T:T轴
- GL_GLAMP_TO_EDGE:当片元U、V坐标超出纹理的S、T坐标系范围,取样纹理边缘的纹素
- GL_REPEAT:尽可能多的重复纹理以填满映射到几何图形的整个U、V区域
MIP贴图
- 拉丁语:Multum In Parvo-放置很多东西的小空间
- 为纹理存储多个细节级别的技术,与取样密切相关。
使用MIP贴图通常会减少GPU取样数量来提高渲染性能,但是MPI贴图使每个纹理所需要的内存增加了1/3。在iOS设备上,内存限制可能优先于渲染性能。最好的策略是测试使用MIP和不使用的性能来决定用不用。