位置: 编程技术 - 正文

Android OpenGL ES(七)----理解纹理与纹理过滤

编辑:rootadmin
1.理解纹理

推荐整理分享Android OpenGL ES(七)----理解纹理与纹理过滤,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

OpenGL中的纹理可以用来表示图像,照片,甚至由一个数学算法生成的分形数据。每个二维的纹理都由许多小的纹理元素组成,它们是小块的数据,类&#;于我们前面讨论过的片段和像素。要使用纹理,最常用的方式是直接从一个图像文件加载数据。

每个二维纹理都有其自己的坐标空间,其范围是从一个拐角的(0,0)到另一个拐角的(1,1)。按照惯例,一个维度叫做S,而另一个称为T。当我们想要把一个纹理应用于一个三角形或一组三角形的时候,我们要为每个顶点指定一组ST纹理坐标,以便OpenGL知道需要用那个纹理的哪个部分画到每个三角形上。这些纹理坐标有时也会被称为UV纹理坐标。如图:

图1 OpenGL二维纹理坐标

对一个OpenGL纹理来说,它没有内在的方向性,因此我们可以使用不同的坐标把它定向到任何我们喜欢的方向上。然而,大多数计算机图像都有一个默认的方向,它们通常被规定为Y轴向下,Y的&#;随着向图像的底部移动而增加。只要我们记住,如果想用正确的方向观察图像,那纹理坐标就必须要考虑这点,这就不会给我们带来任何麻烦。

在标准OpenGL ES 2.0中,纹理不必是正方形,但是每个维度都应该是2的幂(POT)。这就意味着每个维度都是这样的一个数字,如,,等。这样规定的原因在于非POT纹理可以被使用的场合非常有限,而POT纹理使用于各种情况。

纹理的尺寸也有一个最大&#;,它根据不同的实现而变化,但是通常都比较大,比如*。

2.理解纹理过滤

当纹理的大小被扩大或者缩小时,我们还需要使用纹理过滤明确说明会发生什么。当我们在渲染表面上绘制一个纹理时,那个纹理的纹理元素可能无法精确地映射到OpenGL生成的片段上。有两种情况:缩小和放大。当我们尽力把几个纹理元素挤进一个片段时,缩小就发生了;当我们把一个纹理元素扩展到许多片段时,方法就发生了。针对每一种情况,我们可以配置OpenGL使用一个纹理过滤器。

首先,讲述两个基本的过滤模式:最近邻过滤和双线性插&#;。还有其他的过滤模式,以后的博文会讲解。我们会使用下面的图像阐述每一种过滤模式。

最近邻过滤

这个方式为每个片段选择最近的纹理元素。当我们放大纹理时,它的锯齿效果看起来相当明显,如下图所示。

每个纹理单元都清楚的显示为一个小方块。

当我们缩小纹理时,因为没有足够的片段用来绘制所有的纹理单元,许多细节将会丢失。

双线性过滤

双线性过滤使用双线性插&#;平滑像素之间的过渡,而不是为每个片段使用最近的纹理元素,OpenGL会使用四个邻接的纹理元素,并在它们之间用一个线性插&#;算法做插&#;,这个算法与前面所讲的平滑坐在着色一样。我们之所以称它为双线性插&#;,是因为它是沿着两个维度插&#;的。下面是使用双线性差&#;放大后的图像,它采用的纹理与前面的相同。

这个纹理现在看起来比以前平滑多了。但还是有些锯齿显现出来,因为我们把这个纹理扩展得太多,但是锯齿不像使用最近邻过滤那么明显。

MIP贴图

Android OpenGL ES(七)----理解纹理与纹理过滤

尽管双线性过滤很适合处理放大,但是对于缩小到超过一定的大小时,它就不好用了。一个纹理在渲染表面所占大小减少得越多,就会有越多的纹理元素拥挤到每一个片段上。因为OpenGL的双线性过滤只给每个片段使用四个纹理元素,我们将会丢失很多细节。因为每一帧都要选择不同的纹理元素,这还会引起噪音以及移动中的物体闪烁。

为了克服这些缺陷,可以使用MIP贴图技术,它可以用来生成一组优化过的不同大小的纹理。当生成这组纹理的时候,OpenGL会使用所有的纹理元素生成每个级别的纹理,当过滤纹理时,还要确保所有的纹理元素都能被使用。在渲染时,OpenGL会根据每个片段的纹理元素数量为每个片段选择最合适的级别。

下图是一组MIP贴图的纹理,把它们合并在一当个图上是为了方便对比。

图2 MIP贴图的纹理

使用MIP贴图,会占用更多的内存,但是渲染也会更快,这是因为较小级别的纹理在GPU的纹理缓存中占用较少的空间。

为了更好地理解MIP贴图是如何提高缩小情况下的质量,我们比较一下那个可爱的机器人,使用双线性过滤把纹理元素尺寸缩小到其原来的.5%,如下图:

图3 使用双线性过滤缩小

就这种质量,可能还不如最近邻过滤。看一下当我们加入MIP贴图时会得到什么。如下图:

图4 使用MIP贴图缩小

随着MIP贴图的使用,OpenGL将选择最合适的纹理级别,然后用优化过的纹理做双线性插&#;。每个级别的纹理都是用来自所有纹理元素的信息构建的,因此得到的图形看起来更好些,保留了更多的细节。

三线性过滤

如果OpenGL在不同的MIP贴图级别之间来回切换,当我们用双线性插&#;来使用MIP贴图时,在其渲染的场景中,在不同级别的MIP贴图切换时,我们有时候能看到明显的跳跃或者线条。我们可以切换到三线性插&#;,这样,每个片段总共要使用8个纹理元素插&#;。这有助于消除每个MIP贴图级别之间的过渡,并且得到一个更平滑的图像。

3.程序中纹理参数表

方法GLES.glTextParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_FILTER,“纹理过滤模式”);第二个参数指放大的情况。

方法GLES.glTextParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,“纹理过滤模式”);第二个参数指缩小的情况。

第一个参数是告诉OpenGL这应该被作为一个二维纹理对待。

表1 OpenGL纹理过滤模式

GL_NEAREST

最近邻过滤

GL_NEAREST_MIPMAP_NEAREST

使用MIP贴图的最近邻过滤

GL_NEAREST_MIPMAP_LINEAR

使用MIP贴图级别之间插&#;的最近邻过滤

GL_LINEAR

双线性插&#;

GL_LINEAR_MIPMAP_NEAREST

使用MIP贴图的双线性插&#;

GL_LINEAR_MIPMAP_LINEAR

三线性插&#;(使用MIP贴图级别之间插&#;的双线性过滤)

表2 每种情况允许的纹理过滤模式

缩小GL_NEARESTGL_NEAREST_MIPMAP_NEARESTGL_NEAREST_MIPMAP_LINEARGL_LINEARGL_LINEAR_MIPMAP_NEARESTGL_LINEAR_MIPMAP_LINEAR放大GL_NEARESTGL_LINEAR下一篇纹理的应用效果图如下:

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android视图切换库的使用之SwitchLayout的用法及实际应用案例 目前Android上并没有提供类似iOS的视图切换效果,所以很多类似iOS自带的炫酷的视图切换效果要实现起来比较麻烦,这里将会介绍一个Android上的比较好用

Android Studio 新建项目的R文件丢失的解决方法 最近AndroidStudio炒的比较热,于是笔者决定赶赶时髦,从Eclipse转到了AndroidStudio。不幸的是,用AndroidStudio创建项目的时候就遇到了一个比较尖锐的问题—

xUtils 源码解析 本文为Android开源项目源码解析中xUtils部分。项目地址:xUtils,分析的版本:c2ac,Demo地址:xUtilsDemo分析者:Caij,校对者:maogy,校对状态:未完成1

标签: Android OpenGL ES(七)----理解纹理与纹理过滤

本文链接地址:https://www.jiuchutong.com/biancheng/371068.html 转载请保留说明!

上一篇:app项目下文件的作用(app的文件名)

下一篇:Android视图切换库的使用之SwitchLayout的用法及实际应用案例(android界面切换与数据传递)

  • 进项税额转出补交税款
  • 离岸价的含义
  • 财税咨询
  • 为什么增值税不计入营业税金及附加
  • 确认了收入但是没收入
  • 企业困难有哪些
  • 不是小微企业的小规模纳税人的税收优惠
  • 减半征收的印花税缴纳所得税吗
  • 公司注销之后股东还承担责任吗
  • 小规模纳税人小微企业免税销售额
  • 结转已销售材料成本会计分录
  • 贴现费用计算公式
  • 退货的产品会重新包装吗
  • 商品过期可以向商家索要赔偿吗
  • 实收资本账簿印花税需要每年交吗
  • 房地产开发企业预收款预缴增值税
  • 企业发给职工的全年一次性奖金不缴纳个人所得税对吗
  • 一般纳税人企业要交哪些税
  • 收代扣代收代征手续费会计分录
  • 基金管理人收取回扣
  • 纳税人证明怎么办理
  • 制作广告费用
  • 公司有好多没有股份的人
  • 付企业网银年服费怎么付
  • 治理层和管理层包括哪些
  • 水利基金减免怎么做账
  • 贷款逾期了利息和罚息可以不还吗
  • 应税货物销售额是什么意思
  • 虚假财务报表的法律后果
  • 餐费发票怎么做账务处理
  • 承包安装工程怎么报价
  • thinkphp技术
  • laravel 使用redis
  • 使用php进行mysql数据库编程的基本步骤
  • 列表定义格式
  • XF86Setup命令 设置XFee86
  • look 查明
  • 培训费发票是否含税
  • 织梦改logo
  • 织梦官方网站
  • mybatis模糊查询特殊字符处理
  • 不确认递延所得税资产的特殊情况举例
  • 增值税发票抵扣期限是多久
  • 公司帐户转到法人帐户用途写备用金行吗
  • 无形资产租金计入什么科目
  • 异地预缴税款少交了城建税怎么办
  • 债券投资包含哪些
  • 车辆购置税多少个点?
  • 以前年度损益调整
  • 计入资本公积的固定资产处置
  • 直接减免增值税的情形
  • 已认证的发票开具红字发票账务处理?
  • 企业注销递延所得税资产怎么处理
  • 免费品尝活动广告语
  • 退回多交增值税账务处理小规模
  • 变卖固定资产怎么交税
  • 透明终端架构
  • 最新bios界面
  • WorkFlowTray.exe是什么进程
  • 如何将windows文件复制到ubuntu
  • kill强制结束进程的参数
  • win8如何打开设置
  • win10打开此电脑的快捷键
  • kb2859537是什么文件
  • js domcontentloaded
  • 网页设计布局设计
  • tensorflow.nn
  • JQuery和HTML5 Canvas实现弹幕效果
  • node.js deno
  • Node.js中的事件循环是什么意思
  • excel一行首尾互换
  • 置顶是怎么弄的
  • 什么叫开源库
  • 中国移动怎么下载账单
  • 办理税务迁移的流程
  • 财务报表盖章位置
  • 换电员工作时间自由吗
  • 劳务分包需要交什么税
  • 税务局临时工工资多少
  • 被审计了意味着什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设