OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标

1.1 纹理过滤
在这里插入图片描述
像素、片元都是具有面积的,一个像素可能对应物体上的一小块区域,而物体上这个小区域对应于纹理图像上的一个小区域,因此一个像素的颜色可能来自于纹理中的一小个不规则区域,如果纹理的分辨率比较高,则这个区域可能包含多个纹元(纹理中的单元,即纹元),由这几个纹元的颜色确定这个像素的颜色的过程就叫做纹理过滤
在这里插入图片描述

1.2 一个像素一般不会正好对应于一个纹元(texel)。所以像素的颜色无法直接得到,需要经过一定的运算,这个过程就是纹理过滤

1.3 纹理过滤的几种情况

  • GL_TEXTURE_MAG_FILTER,如下左边;
  • GL_TEXTUER_MIN_FILTER,如下右边;
    在这里插入图片描述

纹理过滤的几种方式:

  • GL_NEAREST:选择距像素中心距离最小的texel的颜色作为像素的颜色;
  • GL_LINAR:选择距像素中心最近的四个texel的加权平均值作为像素的颜色;对于上述第一中情况,将会考虑邻居纹元的颜色;

采样上述方式,远处纹理会出现如下错误。
在这里插入图片描述

1.4 MipMap方法

当一个屏幕像素覆盖的纹理区域大于4个纹元甚至更多的时候,采用4个邻居的加权平均值作为像素颜色是不合理的。

1.4.1 mipmap方法

  • 首先对纹理进行预处理,生成不同分辨率的版本;
  • 纹理过滤时,首先选取合适的分辨率,然后进行Linear过滤;
    在这里插入图片描述
    假设,一个像素覆盖了四个纹元,那么就选择14\frac{1}{4}41那张分辨率的图片就行。如果一个像素覆盖了的纹元数量在4~16之间,那么就在14\frac{1}{4}41116\frac{1}{16}161分辨率的图片各取一个值做加权平均即可。

1.4.2 对于GL_TEXTURE_MIN_FILTER方式,才需要采用mipmap方式
在这里插入图片描述
在这里插入图片描述

如下、各种方式,远处的效果,近处采用的都是相同的方式,主要对比远处,可知GL_LINEAR_MIPMAP_LINEAR效果最优,也被称做三线性过滤
在这里插入图片描述

1.4.3 mipmap层 的选择由系统自动完成,采用计算一个像素与其所覆盖的纹理区域的面积比例(取x、y方向上的最大缩放值),由此选定mipmap层。

1.4.4 mipmap的生成

  • 可以调用gluScaleImage()来逐级生成;
  • 通过glTexImage2D(GLenum target,GLint level,…)来进行加载;

更常用的方法是,调用如下方法,就可以生成所以mipmap层级并加载。

int gluBuild2DMipmaps(GLenum target,GLint components,GLint width,GLint height,GLenum fromat,GLenum type,const void* data);//在OpenGL3.0之后,这个函数被提升到了核心库中;
glGenerateMimmap(GLenum target);

1.4.5 Mipmap存在的问题

  • 如果覆盖区域非常狭长,与正方形相差较大,效果不好。
  • 正方形、圆形各个法向尺度一样,为各向同性滤波;
  • 克服上述问题,可以采用各向异性滤波,即可以采用长方形来过滤;
    在这里插入图片描述
    如上图,途中黑白格为长方形时,采用各向异性滤波效果最优。

1.5 纹理坐标

做纹理映射,需要知道纹理坐标。纹理坐标可以自己指定、从模型文件中读取,也可以采用OpenGL自动生成纹理坐标。OpenGL中提供了五种自动生成纹理坐标的方式:

  • GL_OBJECT_LINEAR :
    • 设置三维空间中的一个平面;
    • 计算当前顶点与该平面的距离;
    • 以此距离作为一维纹理中的纹理位置,如果是二维纹理,则可以为s和t分别设置一个平面;
      在这里插入图片描述

三维空间中的一个平面由(p1,p2,p3,p4)四个参数即可确定一个平面,即:
p1∗x+p2∗y+p3∗z+p4=0p1 * x + p2 * y + p3 * z + p4 = 0p1x+p2y+p3z+p4=0,三维空间中顶点到平面的距离计算为:
d=p1∗x+p2∗y+p3∗z+p4d = p1 * x + p2 * y + p3 * z + p4d=p1x+p2y+p3z+p4,则GL_OBJECT_LINEAR中的纹理坐标计算:

g=p1∗x+p2∗y+p3∗z+p4∗wg = p1 * x + p2 * y + p3 * z + p4 * wg=p1x+p2y+p3z+p4w,一般w为1,即齐次坐标,则g就是距离。

  • GL_EYE_LINEAR :
    在这里插入图片描述

1.5.1 操作步骤为:

指定坐标生成模式
在这里插入图片描述
在OpenGL中,(x,y,z,w)表示的是顶点,(s,t,r,q)表示的是纹理坐标,(u,v,w)可以表示纹理坐标。

指定参参考平面的参数:
在这里插入图片描述
打开纹理自动生成的开关:
在这里插入图片描述

1.5.2 更常用的纹理坐标自动生成为:

  • GL_SPHERE_MAP
  • GL_REFLECTION_MAP
  • GL_NORMAL_MAP

可以实现类似于环境映射的效果,把环境映射到模型表面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL之环境映射

1.1 环境映射(Environment Mapping) 具有光滑表面的物体会反射形成周围环境的影响,是一种环境光效果。 光线跟踪等(全局光照)可以实现这种效果,但是效率太低,可以采用环境映射技术就能快速实现。 1.2 环境映射技术 …

Nature对数千篇论文提出质疑:隐藏的细菌蛋白为自然界的“电网”提供动力

隐藏在细菌中的蛋白质在缺乏氧气的时候泵出纳米线,这本质上是“呼出”电子来源:耶鲁大学Nikhil Malvankar耶鲁大学的研究人员在《自然》杂志上报告说,一种隐藏在细菌内部的毛发状蛋白质充当了自然界“电网”的某种开关,“电网”是由细菌产生的…

TCP的拥塞控制机制

拥塞: 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,产生拥塞若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下…

光刻机:半导体工业最耀眼的明珠

来源:胖福的小木屋原标题:《世界上所有半导体企业都离不开的光刻机是什么,一口气带你搞懂》光刻机是在半导体领域必不可少的设备,无论生产制造什么样的芯片,都脱离不了光刻机,如果说航空发动机代表了人类科…

ubuntu-18.04 修改用户名密码

1. 开放root登录 设置root密码 $ sudo passwd root切换到root 用户 $ sudo -i修改/etc/pam.d/gdm-autologin $ vim /etc/pam.d/gdm-autologin  注释所圈行修改/etc/pam.d/gdm-password $ vim /etc/pam.d/gdm-password  同样注释所圈行修改/root/.profi…

网络层的基本概念

网络层的功能 网络层负责实现各种不一样的物理网络的互联 网络层采用分组交换技术网络层应当使用统一编址路由器使用存储转发实现异构网络的互联网络层关注分组从一个网络到达另一个网络的选路问题 资源子网与通信子网 资源子网 负责全网的数据处理业务,向网络…

JS高级学习笔记(6)- 事件循环

参考文章:深入理解JS引擎的执行机制 JavaScript 异步、栈、事件循环、任务队列 我的笔记:ES系列之Promise async 和 await Event Loop 前提 js是单线程的 js的Event Loop是JS的执行机制,深入了解JS的执行,就等于深入了解JS里的event …

[美]杰克·巴尔金:算法社会中的三大法则

杰克巴尔金:耶鲁大学奈特宪法与第一修正案讲席教授,耶鲁大学法学院信息社会项目主任。来源:数字法治译者:刘颖,同济大学法学院助理教授、硕士生导师,法学博士。陈瑶瑶,上海大学法学院硕士研究生…

CentOS7完成mysql的安装和远程访问

详见链接https://blog.csdn.net/weixin_42266606/article/details/80879571 (此处我的本地用户名root,密码root;远程用户名root,密码12345) 1.下载 MySQL 所需要的安装包 网址:https://dev.mysql.com/downloads/mysql/ 2.Select O…

维特根斯坦:为何夸大人工智能是对人性的贬损?

© Semantics3来源:利维坦文:Steven Gambardella译:苦山校对:兔子的凌波微步原文:medium.com/stevengambardella/wittgenstein-intelligence-is-never-artificial-51933315d1bd利维坦按:众所周知&#…

哔哩哔哩n倍速播放视频

在b站看一些学习视频的时候,有时候2倍速满足不了我们的需求,可以在控制台键入以下命令实现n倍速播放视频 document.querySelector(video).playbackRate 3

法国数学到底有多厉害?

来源:盘古论市、EETOP等引子在德国数学家高斯的一部传记中,作者引用了下面这段话:有一个异乡人在巴黎问当地人,“为什么贵国历史上出了那么多伟大的数学家?”巴黎人回答,“我们最优秀的人学习数学。”又去问…

DevExpress破解和消除弹出框问题

在解决方案管理器列表中找到 license.licx 设置属性 将[生成操作]选项改为[无] 转载于:https://www.cnblogs.com/sinceret/p/10556243.html

放心,GPT-3不会“杀死”编程

来源:towardsdatascience.com作者:Alberto Romero译者:朱琪珊策划:刘燕本文由 Alberto Romero 发表在 towardsdatascience.com,经原作者授权由 InfoQ 中文站翻译并分享OpenAI 于 2020 年 7 月发布了 GPT-3 的 beta API…

com.sun.jersey.api.client.UniformInterfaceException:returned a response status of 403

这是在同一台电脑上,然后启动两台tomcat进行文件传输时候,会出现的一个异常. 403,是因为tomcat默认禁止上传,在tomcat中的config中的web.xml中进行以下的配置就可以进行文件的上传了. <servlet><servlet-name>default</servlet-name> <servlet-cla…

深度学习环境搭建之Anaconda安装keras

一、确定安装版本号 搭环境遇到一堆坑&#xff0c;总结一点最重要的就是要选择好版本。 这里我们要注意tensorflow与keras的版本对应关系。见下图 二、使用pip进行安装 这里注意首先要激活对应的环境 pip install keras版本号后续有时间再补充安装tensorflow-gpu以及pytorch…

顾险峰: 庞加莱猜测的证明和应用

来源&#xff1a;中国科学院数学与系统科学研究院、数学算法俱乐部庞加莱猜测的证明&#xff0c;在几年前引起世人的广泛关注&#xff0c;更掀起中外数学界一场不小的风波。8月8日&#xff0c;丘成桐先生弟子顾险峰教授在知社讲坛做了题为《庞加莱猜测有用吗&#xff1f;》的精…

大脑是怎样和身体交流的?

来源&#xff1a;脑与心智毕生发展研究中心CLIMB你看到五英寸之外向你飞来的球&#xff0c;尽可能迈着最大的步子冲过去抓住它&#xff1b;你用手指抓住了球&#xff0c;突然听到妈妈叫你的名字&#xff0c;你意识到该吃晚饭了&#xff0c;所以你赶紧回家——这些是怎么发生的呢…

关于c语言的数据类型常量的理解

数据类型 int的简单介绍 数据类型在数据结构中的定义是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称。 变量是用来存储值的所在处&#xff0c;它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它…

非打印字符

ASCLL码值的使用使c语言中用&#xff0c;使得仅使用整数就可用在计算机上各种字符&#xff08;包括各国的语言文字&#xff0c;符号&#xff09;&#xff0c;可是一些代表行为的ASCLL字符却无法打印出来&#xff08;如&#xff1a;退格、换行、终端响铃之类的&#xff09;。这里…