美文网首页
OpenGL 纹理篇

OpenGL 纹理篇

作者: Damon_He | 来源:发表于2019-12-11 15:10 被阅读0次

    什么是纹理

    在计算机图形学中,纹理既包括通常意义上物体表面的纹理,也就是我们土话所讲的使物体表面呈现凹凸不平的沟纹;同时也包括在物体的光滑表面上的彩色图案,通常我们更多地称之为花纹

    这些在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 与 线性采样

    相关文章

      网友评论

          本文标题:OpenGL 纹理篇

          本文链接:https://www.haomeiwen.com/subject/zsgogctx.html