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,一经查实,立即删除!

相关文章

转 关于window10安装jdk,配置环境变量,javac不是内部或外部命令,也不是可运行的程序 或批处理文件的细节问题。...

今日拿到一台新的window10笔记本电脑,非常熟练的安装了JDK(因为在学校经常给同学安装JDK - -)但是发现java java -version命令都可以使用,唯独javac命令出现不是内部或外部命令,也不是可运行的程序或批处理文件。出现这…

OpenGL之环境映射

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

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

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

Hadoop之Shell脚本自动启动

在用Hadoop进行大数据分析处理时,通常配置的服务器不止一两台。为了减少人工操作的重复性,所以hadoop提供了可以自动启动Hadoop集群的Shell脚本。在使用Shell脚本启动集群之前,需要进行相应的配置。 说明:$HADOOP_HOME/root/proje…

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 …

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

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

Vue快速入门笔记(一)

文章目录一、Vue基础1、第一个Vue程序2、el:挂载点3、data:数据对象二、模板语法1、v-once2、v-html3、v-bind4、v-text5、v-on三、计算属性和侦听器1、计算属性2、侦听器四、Class与Style绑定1、绑定HTML Class2、绑定内联样式五、条件渲染1、v-if2、v-…

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

虚拟机的ip地址为什么会发生变化

因为虚拟机在NAT模式下由Vmware8虚拟网卡提供虚拟机的IP分配,网桥模式下由Vmware1来提供IP分配。它们都相当于 一个小型的DHCP服务器,除非改动虚拟机的网络连接方式,或动了虚拟网卡服务属性,那么虚拟机的IP租约过期后,…

法国数学到底有多厉害?

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

DevExpress破解和消除弹出框问题

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

Linux下进入Anaconda Prompt以及Navigator

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 一、进入Anaconda Promp 打开终端,cd 进Anaconda下的bin目录 conda activate退出 conda deactivate二、进入Anaconda Navigator anaconda-navigator

放心,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…