浅谈OPenGL中的纹理过滤

news2025/1/19 2:55:40

       纹理图像中的纹理单元和屏幕上的像素几乎从来不会形成一对一的对应关系。如果程序员足够细心,确实可以实现这个效果,但这需要在对几何图形进行纹理贴图时进行精心的计划,使出现在屏幕上的纹理单元和像素能够对齐(实际上在用OPenGL进行图像处理应用时,经常做这项工作)。因此,当纹理应用于几何图形表面时,纹理图像不是被拉伸就是被收缩。根据几何图形的方向,一个特定的纹理甚至可能会在贴到一些物体表面的同时就开始进行拉伸或收缩。

        根据一个拉伸或收缩的纹理贴图计算颜色片段的过程称为纹理过滤(Texture Fililtering)。使用OPenGL的纹理参数函数,可以同时设置放大或缩小过滤器。这两种过滤器的参数名分别为:

GL_TEXTURE_MAG_FILTER  // 纹理被拉伸时的过滤器
GL_TEXTURE_MIN_FILTER  // 纹理被缩小时的过滤器

可以为它们从两种基本的纹理过滤器GL_NEAREST和GL_LINEAR中选择,它们分别对应最邻近过滤和线性过滤。确保总是为GL_TEXTURE_MIN_FILTER选择两种过滤器中的一种,因为默认的过滤器不适用于Mip贴图。

       最邻近过滤是我们能够选择的最简单、最快速的过滤方法。纹理坐标总是根据纹理图像的纹理单元进行求值和绘图的。不管纹理坐标位于哪个纹理单元,这个纹理单元的颜色就作为这个片段的纹理颜色。GL_NEAREST(也叫邻近过滤,Nearest Neighbor Filtering)是OpenGL默认的纹理过滤方式。当设置为GL_NEAREST的时候,OpenGL会选择中心点最接近纹理坐标的那个像素。下图中你可以看到四个像素,加号代表纹理坐标。左上角那个纹理像素的中心距离纹理坐标最近,所以它会被选择为样本颜色:

最邻近过滤最显著的特征就是当纹理被拉伸到特别大时出现的大片斑驳像素(参见文末贴图)。为放大和缩小过滤器设置最邻近纹理过滤器(用于GL_TEXTURE_2D) 代码如下:

glTextParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTextParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

和最邻近过滤相比,线性过滤还需要更多工作,但它所实现的效果往往值得付出这些额外的开销。在当今高速硬件上,线性过滤带来的额外开销几乎可以忽略不计。

         线性过滤并不是把最邻近的纹理单元应用到纹理坐标中,而是把这个纹理坐标作为的纹理单元的加权平均值应用到这个纹理坐标上(线性插值)。为了让这个插值的片段与纹理单元的颜色准确匹配,纹理坐标需要准确地落在纹理单元的中心。线性过滤最显著的特征就是当纹理本拉伸时出现的失真图像,但是和最邻近过滤模式下所呈现的斑驳状像素块相比,这种失真更接近真实,没有那种人工操作的 痕迹。 为放大和缩小过滤器设置线性纹理过滤器(用于GL_TEXTURE_2D) 代码如下:

glTextParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTextParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

GL_LINEAR(也叫线性过滤,(Bi)linear Filtering)它会基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。一个纹理像素的中心距离纹理坐标越近,那么这个纹理像素的颜色对最终的样本颜色的贡献越大。下图中你可以看到返回的颜色是邻近像素的混合色:

 那么这两种纹理过滤方式有怎样的视觉效果呢?让我们看看在一个很大的物体上应用一张低分辨率的纹理会发生什么吧(纹理被放大了,每个纹理像素都能看到): 

可以看到,最邻近过滤器有明显的斑驳状。 

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

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

相关文章

项目协作软件对比分析:各大竞品的优缺点客观评析

随着科技的发展,越来越多的企业和团队开始使用项目协作软件来提高工作效率和协同能力。然而,市场上众多的项目协作软件让许多用户感到困惑,不知道如何选择最适合自己的工具。本文将从多个角度对目前市场上的主要项目协作软件进行客观分析&…

cesium wall (动态立体墙效果)

cesium 动态立体墙效果 以下为源码直接复制可用 实现效果 实现思路 通过修改“material”自定义材质实现动态效果 核心类(WallCorrugationsMaterialProperty )自定义材质 class WallCorrugationsMaterialProperty {constructor(options) {this

51单片机的简易计算器数码管显示仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

51单片机的简易计算器数码管显示仿真设计 1.主要功能:2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接 51单片机的简易计算器数码管显示仿真设计( proteus仿真程序原理图报告讲解视频) 仿真图proteus7.8及以上 程序编译器…

pyqt5设置背景图片

PyQt5设置背景图片 1、打开QTDesigner 创建一个UI&#xff0c;camera.ui。 2、创建一个pictures.qrc文件 在ui文件同级目录下先创建一个pictures.txt&#xff0c;填写内容&#xff1a; <RCC><qresource prefix"media"><file>1.jpg</file>…

基于PyTorch使用LSTM实现新闻文本分类任务

本文参考 PyTorch深度学习项目实战100例 https://weibaohang.blog.csdn.net/article/details/127154284?spm1001.2014.3001.5501 文章目录 本文参考任务介绍做数据的导入 环境介绍导入必要的包介绍torchnet和keras做数据的导入给必要的参数命名加载文本数据数据前处理模型训…

《深入Flexbox和Grid:现代CSS布局的秘密武器》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

ensp综合实验

目录标题 1、网段划分2、配置所有的接口ip3、配置所有的环回4、配置全网可达5、测试是否全网通6、配置第3问中不写静态路由&#xff0c;也能访问5.5.5.07、配置PC1-PC4的IP地址自动获取DHCP8.Client可以通过DNS获取文件8、将AR5的80端口与Client进行端口映射&#xff0c;绑定为…

计算机网络中的应用层和传输层(http/tcp)

目录 1、协议的通俗理解 1.1 理解协议 2.应用层 2.1 http协议 2.2 HTTP的方法 2.3 HTTP的状态码 2.4 HTTP常见Header 3、传输层 3.1 端口号 3.1.1 端口号范围划分 3.1.2 netstat 3.1.3 认识知名端口号(Well-Know Port Number) 3.2 UDP协议 3.2.1 UDP协议端格式 3…

机器学习实战-系列教程8:SVM分类实战3非线性SVM(鸢尾花数据集/软间隔/线性SVM/非线性SVM/scikit-learn框架)项目实战、代码解读

&#x1f308;&#x1f308;&#x1f308;机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 SVM分类实战1之简单SVM分类 SVM分类实战2线性SVM SVM分类实战3非线性SVM 4、非线性SVM 4.1 创建非线性数据 from sklearn.data…

动手深度学习——Windows下的环境安装流程(一步一步安装,图文并配)

目录 环境安装官网步骤图文版安装Miniconda下载包含本书全部代码的压缩包使用conda创建虚拟&#xff08;运行&#xff09;环境使用conda创建虚拟环境并安装本书需要的软件激活之前创建的环境打开Jupyter记事本 环境安装 文章参考来源&#xff1a;http://t.csdn.cn/tu8V8 官网…

基于堆叠⾃编码器的时间序列预测 深层神经网络

自适应迭代扩展卡尔曼滤波算法&#xff08;AIEK&#xff09;是一种滤波算法&#xff0c;其目的是通过迭代过程来逐渐适应不同的状态和环境&#xff0c;从而优化滤波效果。 该算法的基本思路是在每一步迭代过程中&#xff0c;根据所观测的数据和状态方程&#xff0c;对滤波器的…

【面试经典150 | 数组】移除元素

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;原地操作 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等…

基于YOLOv8模型和BDD数据集的自动驾驶目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型和BDD数据集的自动驾驶目标检测系统可用于日常生活中检测与定位车辆目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测…

【Spring面试】四、Bean的生命周期、循环依赖、BeanDefinition

文章目录 Q1、Bean有哪些生命周期回调方法&#xff1f;有哪几种实现方式&#xff1f;Q2、Spring在加载过程中Bean有哪几种形态Q3、解释下Spring框架中Bean的生命周期Q4、Spring是如何解决Bean的循环依赖的Q5、Spring是如何帮我们在并发下避免获取不完整的Bean的&#xff1f;Q6、…

LeetCode 729. My Calendar I【设计;有序集合,二分查找;线段树】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Single View Point Omnidirectional Camera Calibration from Planar Grids

参考论文 paper里面最关键的部分为这段 实际相当于有一个xi的参数要使用, 和正常的相机内参定义不太一样, 那么在3d往相机上投的时候, 是这样的 也参考: https://github.com/autonomousvision/kitti360Scripts/blob/master/kitti360scripts/helpers/project.py#L174-L198

TDesign数据请求wx.request

wxml页面如下&#xff1a; bind:tap绑定了handleAjax事件&#xff0c;js页面如下&#xff1a; 点击按钮&#xff0c;运行成功输出data 报错&#xff1a; 小程序 (qq.com)https://mp.weixin.qq.com/ 再次点击按钮ajax 运行成功&#xff1a;

JTAG 简介

文章目录 1、JTAG 基本原理1.1、JTAG接口包括以下几个信号&#xff1a;1.2、The Debug TAP State Machine (DBGTAPSM) 2、JTAG 的应用 1、JTAG 基本原理 JTAG是Joint Test Action Group的缩写&#xff0c;它是一种国际标准测试协议&#xff0c;主要用于芯片或印制电路板的边界…

SpringBoot系列(12):SpringBoot集成log4j2日志配置

最近项目上有使用到log4j2日志模板配置&#xff0c;本文简单总结一下之前的学习笔记&#xff0c;如有纰漏之处&#xff0c;请批评指正。 1. log4j2日志依赖 使用log4j2日志模板时&#xff0c;需要引入相关依赖&#xff0c;下边的两种依赖方式均可。 1.1 使用sl4j依赖时 <…

kafka学习-消费者

目录 1、消费者、消费组 2、心跳机制 3、消费者常见参数配置 4、订阅 5、反序列化 基本概念 自定义反序列化器 6、位移提交 6.1、自动提交 6.2、手动提交 同步提交 异步提交 7、再均衡 7.1、定义与基本概念 7.2、缺陷 7.3、如何避免再均衡 7.4、如何进行组内分…