OpenGL ES纹理

1,纹理
【1】什么是纹理:
定义:在计算机图形学中,纹理既包括通常意义上物体表面的纹理。也就是我们土话所讲的使物体表面呈现凹凸不平的沟纹,同时也包括在物体的光滑表面上的彩色图案,通常我们更多地称之为花纹。
这些在OpenGL里面都是纹理,而且表示方式一样
【2】纹理的基本原理
纹理映射就是在物体的表面上绘制彩色的图案。
【3】纹理映射的过程
纹理映射的基本思想就是 首先为图元中的每个顶点指定恰当的纹理坐标,然后通过纹理坐标在纹理图中可以确定选中的纹理区域,最后将选中纹理区域中的内容 根据纹理坐标映射到指定的图元上!


纹理映射.png

需要注意的点
1、纹理坐标系原点在左上侧,向右为S轴,向下为T轴,两轴的取值范围都是 0 ~~ 1;( 也就是说不论实际纹理图尺寸如何,其横向、纵向坐标最大值都是1。)
(例如:实际图为 521256像素,则横边的第512个像素,对应纹理坐标的1,竖边的第256个像素对应纹理坐标为1)
2、 纹理尺寸:图片宽高必须为2的n次方!!
例如:8
8,16*8。。。。。
2,实现简单的纹理映射

3,纹理拉伸
纹理拉伸有两种方式:
1.重复拉伸
修改纹理坐标,
public float texCoor[]=new float[ ]{
0.5f ,0,
0 ,1.5f,
1.5f ,1.5f
};
//=========================================
然后修改纹理加载方式
//重用纹理
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D
,GLES20.GL_TEXTURE_WRAP_S //S轴拉伸方式
,GLES20.GL_REPEAT); //

GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D
,GLES20.GL_TEXTURE_WRAP_T
,GLES20.GL_REPEAT);
2.截取拉伸
特点:当纹理坐标的值大于一时都看做一
//截取纹理
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);

4,纹理采样
什么是纹理采样:
根据片元的纹理坐标,到纹理图中提取对应位置颜色的过程。
1.最近点采样
原理:对应像素点
优点:简单,采样最快
缺点:将小图映射到较大的图元时,会出现明显的锯齿

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);

2.线性采样
原理:加权平均
优点:平滑过渡
缺点:有时候线条边缘会比较模糊
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与最近点,mag 与 线性采样

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