OpenGL 纹理篇
2019-12-11 本文已影响0人
Damon_He
什么是纹理
在计算机图形学中,纹理既包括通常意义上物体表面的纹理,也就是我们土话所讲的使物体表面呈现凹凸不平的沟纹;同时也包括在物体的光滑表面上的彩色图案,通常我们更多地称之为花纹。
这些在OpenGL里面都是纹理,而且表示方式一样
纹理的基本原理
纹理映射就是在物体的表面上绘制彩色的图案。
纹理映射的过程
首先为图元中的每个顶点指定恰当的纹理坐标,然后通过纹理坐标在纹理图中可以确定选中的纹理区域,最后将选中纹理区域中的内容根据纹理坐标映射到指定的图元上!
纹理映射.png需要注意的点
纹理坐标系原点在左下侧,向右为S轴,向上为T轴,两轴的取值范围都是 0 ~ 1;( 也就是说不论实际纹理图尺寸如何,其横向、纵向坐标最大值都是1)
(例如:实际图为 521*256像素,则横边的第512个像素,对应纹理坐标的1,竖边的第256个像素对应纹理坐标为1)
纹理尺寸:图片宽高必须为2的n次方!!
例如:8 * 8, 16 * 8。。。。。
纹理拉伸
重复拉伸(平铺)
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
截取拉伸(边缘拉伸)
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
纹理采样
根据片元的纹理坐标,到纹理图中提取对应位置颜色的过程。
最近点采样
原理:对应像素点
优点:简单,采样最快
缺点:将小图映射到较大的图元时,会出现明显的锯齿
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
线性采样
原理:加权平均
优点:平滑过渡
缺点:有时候线条边缘会比较模糊
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
MAG 和 MIN 区别
当纹理图中的一个像素对应多个片元时,采用mag,反之min。(纹理比图元小,用mag,反之用min)
配合:min与最近点,mag 与 线性采样