当前位置: 首页 > news >正文

OpenGL中的纹理过滤GL_NEAREST和GL_LINEAR

一、GL_NEAREST(最近邻插值)

1.1 原理

        当需要从纹理中采样颜色时,GL_NEAREST模式会选择离采样点最近的纹理像素(通常是最接近采样点的纹理元素的中心),并直接使用该像素的颜色值作为输出。这种模式不进行任何插值计算。

1.2 特点

1、快速:由于无需进行复杂的插值计算,GL_NEAREST模式在性能上通常优于GL_LINEAR。

2、锯齿状边缘:由于直接使用单个像素的颜色,放大后的纹理会出现明显的锯齿边缘,尤 其是在大幅度缩放或以低分辨率纹理渲染高分辨率物体时。

3、清晰度:对于小尺寸、像素艺术风格或需要保持锐利边缘的纹理,GL_NEAREST模式可以保留原始像素的精确颜色,保持图像的清晰度和细节。

二、GL_LINEAR(双线性插值)

1.1 原理

        当需要从纹理中采样颜色时,GL_LINEAR模式会考虑采样点周围最近的四个纹理像素(一个正方形区域内的像素),并对这四个像素的颜色值进行加权平均,以得到平滑过渡的颜色。对于三维纹理或更高维度的纹理,它会考虑更多的相邻像素并进行更高维的线性插值。

1.2 特点

1、平滑:GL_LINEAR模式产生的纹理放大效果更加平滑,边缘没有明显的锯齿,视觉效果更为柔和。

2、模糊:相较于GL_NEAREST,GL_LINEAR模式可能会引入轻微的模糊,特别是在大幅度缩放时。这种模糊是由于插值过程混合了多个像素的颜色造成的。

3、适用场景:对于需要平滑过渡、细节丰富、或对视觉质量要求较高的纹理(如照片、自然景观、高清图形等),GL_LINEAR模式通常能提供更好的视觉效果。

三、用途

3.1 GL_NEAREST通常适用情况

1、性能敏感的应用,需要快速渲染大量纹理,且对平滑度要求不高。

2、像素艺术风格的游戏或图形,需要保持原始像素的锐利边缘和清晰度。

3、对于某些特定的艺术效果或视觉风格,可能需要刻意保持锯齿边缘。

3.2 GL_LINEAR通常适用情况

1、需要高质量渲染效果的应用,如照片编辑软件、3D建模和渲染、高清游戏等。

2、大幅度缩放纹理或以非整数坐标采样的场景,为了消除锯齿并保持平滑过渡。

3、对于视觉质量要求较高的用户界面元素,如图标、背景图片等。

四、实际应用

//纹理textureWall = new QOpenGLTexture(QImage(":/imags/imag/1.jpg").mirrored());textureLe = new QOpenGLTexture(QImage(":/imags/imag/2.jpg").mirrored());textureSmall = new QOpenGLTexture(QImage(":/imags/imag/3.jpg").mirrored());//设置纹理单元,纹理单元有16个m_shaderProgram.bind();m_shaderProgram.setUniformValue("textureWall", 0);m_shaderProgram.setUniformValue("textureLe", 1);m_shaderProgram.setUniformValue("textureSmall", 2);//纹理绑定textureSmall->bind(2);textureLe->bind(1);textureWall->bind(0);/**********在画之前设置纹理参数**********///复制,qt默认复制glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);//镜像,T和S对应X和Y轴
//  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
//  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);//纹理坐标约束到0到1,超出部分边缘拉伸
//  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
//  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);//超出坐标指定边缘色
//  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
//  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
//  glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);//纹理像素(过滤),GL_NEAREST高新能低质量/GL_LINEAR高质量低性能,这里设置缩小像素,放大线性glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);/*************************************/

相关文章:

OpenGL中的纹理过滤GL_NEAREST和GL_LINEAR

一、GL_NEAREST(最近邻插值) 1.1 原理 当需要从纹理中采样颜色时,GL_NEAREST模式会选择离采样点最近的纹理像素(通常是最接近采样点的纹理元素的中心),并直接使用该像素的颜色值作为输出。这种模式不进行任…...

vue 性能优化

data 层级不要太深 data 层级太深会增加响应式监听的计算,导致页面初次渲染时卡顿。 合理使用 v-show 和 v-if 频繁切换时,使用 v-show无需频繁切换时,使用 v-if 合理使用 computed computed 有缓存,data 不变时不会重新计算&…...

互联网大厂ssp面经(操作系统:part1)

1. 什么是进程和线程?它们之间有什么区别? a. 进程是操作系统中运行的一个程序实例。它拥有独立的地址空间和资源,可以独立执行。 b. 线程是进程内的一个执行单元,一个进程可以包含多个线程。 c. 线程共享进程的资源,…...

Android Activity 启动涉及几个进程

Zygote进程: Zygote进程在Android系统启动时被初始创建,并且初始化了虚拟机(Dalvik或ART),预加载了Android系统的核心类库。所有的Android应用进程都是通过fork()从Zygote进程派生出来的,这允许应用快速启动&#xff0…...

说说你对链表的理解?常见的操作有哪些?

一、是什么 链表(Linked List)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,由一系列结点(链表中每一个元素称为结点)组成 每个结点包括两个部分&…...

每天五分钟深度学习:逻辑回归算法的损失函数和代价函数是什么?

本文重点 前面已经学习了逻辑回归的假设函数,训练出模型的关键就是学习出参数w和b,要想学习出这两个参数,此时需要最小化逻辑回归的代价函数才可以训练出w和b。那么本节课我们将学习逻辑回归算法的代价函数是什么? 为什么不能平方差损失函数 线性回归的代价函数我们使用…...

llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署

文章目录 简介支持的模型列表2. 添加自定义数据集3. lora 微调4. 大模型 lora 权重,部署问题 参考资料 简介 文章列表: llama-factory SFT系列教程 (一),大模型 API 部署与使用llama-factory SFT系列教程 (二),大模型在自定义数…...

C语言游戏实战(11):贪吃蛇大作战(多人对战)

成果展示: 贪吃蛇(多人对战) 前言: 这款贪吃蛇大作战是一款多人游戏,玩家需要控制一条蛇在地图上移动,吞噬其他蛇或者食物来增大自己的蛇身长度和宽度。本游戏使用C语言和easyx图形库编写,旨在…...

腾讯测试岗位的面试经历与经验分享【一面、二面与三面】

腾讯两个月的实习一转眼就结束了,回想起当时面试的经过,感觉自己是跌跌撞撞就这么过了,多少有点侥幸.马上腾讯又要来校招了,对于有意愿想投腾讯测试岗位的同学们,写了一些那时候面试的经历和自己的想法,算不上经验,仅供参考吧! 一面 — —技术基础,全面…...

手机移动端网卡信息获取原理分析

有些场景我们需要获取当前手机上的网卡信息(如双卡双待、Wifi等)。本文准备研究一下这块的原理,以便更好的掌握相关技术原理。 1、底层系统接口 getifaddrs 使用 getifaddrs 接口可以达到我们的目的,该接口会返回本地所有网卡的信…...

无人新零售引领的创新浪潮

无人新零售引领的创新浪潮 在数字化时代加速演进的背景下,无人新零售作为商业领域的一股新兴力量,正以其独特的高效性和便捷性重塑着传统的购物模式,开辟了一条充满创新潜力的发展道路。 依托人脸识别、物联网等尖端技术,无人新…...

SD-WAN提升企业网络体验

在现代企业中,网络体验已成为提升工作效率与业务质量的关键因素。SD-WAN技术的出现,以其独特的优势,为企业提供了优化网络连接、加速数据传输、提升服务质量和应用访问体验,以及增强网络稳定性的解决方案。接下来,我们…...

Docker搭建Let‘s Encrypt

Let’s Encrypt是一个免费、开放和自动化的证书颁发机构(CA),它提供了一种简单、无需重复的机制来获取和更新SSL/TLS证书。Let’s Encrypt Docker镜像允许用户在容器化环境中轻松部署和使用Let’s Encrypt的服务。 主要功能包括:…...

单链表讲解

一.链表的概念以及结构 链表是一种物理结构上不连续,逻辑结构上连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表的结构与火车是类似的,一节一节的,数据就像乘客一样在车厢中一样。 与顺序表不同的…...

DFS算法系列 回溯

DFS算法系列-回溯 文章目录 DFS算法系列-回溯1. 算法介绍2. 算法应用2.1 全排列2.2 组合2.3 子集 3. 总结 1. 算法介绍 回溯算法是一种经典的递归算法,通常被用来解决排列问题、组合问题和搜索问题 基本思想 从一个初始状态开始,按一定的规则向前搜索&…...

Linux C应用编程:MQTT物联网

1 MQTT通信协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传 输)是一种基于客户端-服务端架构的消息传输协议,如今,MQTT 成为了最受欢迎的物联网协议,已广泛应用于车联网、智能家居、即时聊…...

企业常用Linux文件命令相关知识+小案例

远程连接工具无法连接VMWARE: 如果发现连接工具有时连不上,ip存在,这时候我们查看网络编辑器,更多配置,看vnet8是不是10段,nat设置是否是正确的? 软件重启一下虚机还原一下网络编辑器 查看文件…...

Istio介绍

1.什么是Istio Istio是一个开源的服务网格(Service Mesh)框架,它提供了一种简单的方式来为部署在Kubernetes等容器编排平台上的微服务应用添加网络功能。Istio的核心功能包括: 服务治理:Istio能够帮助管理服务之间的…...

代码随想录算法训练营第四十七天|leetcode115、392题

一、leetcode第392题 本题要求判断s是否为t的子序列,因此设置dp数组,dp[i][j]的含义是下标为i-1的子串与下标为j-1的子串相同字符的个数,可得递推公式是通过s[i-1]和t[j-1]是否相等区分。 具体代码如下: class Solution { publ…...

将Ubuntu18.04默认的python3.6升级到python3.8

1、查看现有的 python3 版本 python3 --version 2、安装 python3.8 sudo apt install python3.8 3、将 python3.6 和 3.8 添加到 update-alternatives sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --insta…...

OpenClaw工作空间管理工具:自动化配置维护与AI Agent开发效率提升

1. 项目概述:一个为OpenClaw工作空间量身打造的“管家”如果你正在使用OpenClaw,或者对AI Agent、Claude这类工具构建的自动化工作流感兴趣,那你大概率和我一样,经历过一个甜蜜的烦恼:随着项目越来越复杂,工…...

开源技能图谱平台gotalab/skillport:构建可视化知识大脑的实战指南

1. 项目概述:一个技能图谱与知识管理的开源利器 在信息爆炸的时代,无论是个人学习成长,还是团队知识沉淀,我们常常面临一个核心痛点: 知识是零散的、孤立的,难以形成体系,更难以高效复用 。你…...

CoPaw智能体工厂:基于三层策略与安全协议的自动化创建工具

1. 项目概述:一个为CoPaw智能体平台量身定制的“智能体工厂”如果你正在使用CoPaw(或者更广为人知的AgentScope)来构建和管理你的AI智能体,那么你肯定遇到过这样的场景:每次想创建一个新的智能体工作区(wor…...

SITS 2026闭门工作坊流出的7个LLM推理性能反模式(含3个被主流框架默认启用的致命配置)

更多请点击: https://intelliparadigm.com 第一章:AI原生性能优化:SITS 2026 LLM推理加速实战技巧 在 SITS 2026 基准测试中,LLM 推理延迟与显存带宽利用率成为关键瓶颈。AI 原生优化并非简单套用传统 CUDA kernel 调优&#xff…...

App安全测试实战:OWASP ZAP 2.8 代理配置进阶与场景化应用

1. OWASP ZAP 2.8代理配置的核心价值 如果你做过移动应用安全测试,一定遇到过这样的困境:抓不到HTTPS流量、内网环境难以调试、自动化测试时代理频繁断开。这些问题看似简单,实际会浪费大量时间在环境搭建上。我在去年的一次金融App测试中&am…...

别再到处找了!用BigMap+geojson.io,5分钟搞定ECharts镇级地图的GeoJSON数据

5分钟极速获取镇级GeoJSON数据:BigMapgeojson.io与ECharts实战指南 当我们需要在数据可视化项目中展示乡镇级地理信息时,常常会遇到数据获取的难题。主流地图平台提供的API往往止步于区县级,而公开数据源又难以满足定制化需求。本文将介绍一套…...

Adobe-GenP:探索Adobe全家桶功能解锁的智能解决方案

Adobe-GenP:探索Adobe全家桶功能解锁的智能解决方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款专为Adobe Creative Cloud用户设计…...

CANN/GE获取模型输出名称

aclmdlGetOutputNameByIndex 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch…...

一文讲透 ReAct:推理与行动交替的智能体范式

一文讲透 ReAct:推理与行动交替的智能体范式 一、引言 钩子 你有没有过这样的经历:问GPT-4「2024年欧洲杯冠军是谁?」,它只会抱歉地说「我的知识截止到2023年10月,无法提供实时信息」;你让它算「华为Mate60 Pro发布时间比iPhone15早多少天?」,它要么给出错误的日期,…...

comsol导出高分辨率stl文件

笔者在做毕设时想要从comsol 6.4中导出高分辨率的stl文件,但是发现comsol不能调节分辨率。故此,做以下解决措施①从comsol导出step这种通用格式文件②用solidworks打开step文件③在sw中进行featurework这种操作,也就是说这一步先将step文件转…...