OpenGL之纹理过滤的四种方式

OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标 图形编程技术 阅读详情

I.纹理过滤:

当三维空间里面的多边形经过坐标变换、投影、光栅化等过程,变成二维屏幕上的一组象素的时候,对每个象素需要到相应纹理图像中进行采样,这个过程就称为纹理过滤。

II.纹理过滤通常分为2种情况:
a) 纹理被缩小 GL_TEXTURE_MIN_FILTER
比如说一个8 x 8的纹理贴到一个平行于xy平面的正方形上,最后该正方形在屏幕上只占4 x 4的象素矩阵,这种情况下一个象素对应着多个纹理单元。
b) 纹理被放大 GL_TEXTURE_MAG_FILTER
纹理被放大这种情况刚好跟上面相反,假如我们放大该正方形,最后正方形在屏幕上占了一个16 x 16的象素矩阵,这样就变成一个纹理单元对应着多个象素。

III.几种不同的纹理过滤方式:
1.最近点采样 GL_NEAREST
2.线性纹理过滤(双线性过滤)GL_LINEAR
3.mipmap纹理过滤(三线性过滤) GL_LINEAR_MIPMAP_LINEAR
4.各向异性过滤

a) 最近点采样
最近点采样,不进行任何过滤操作的速度最快也最简单,只是针对每一个象素对最接近它的纹理单元进行采样,可用于上面两种情况。但是这种纹理过滤方法的效果最差,在屏幕显示的图像会显得十分模糊。
 

b)双线性过滤 Bilinear Interpolation
线性过滤也比较简单,每个象素要对最接近它的2 x 2的纹理单元矩阵进行采样,取4个纹理单元的平均值,也可用于上面的两种情况。这种纹理过滤方法的效果比上面的要好很多。
这是一种较好的材质影像插补的处理方式,会先找出最接近像素的四个图素,然后在它们之间作差补效果,最后产生的结果才会被贴到像素的位置上,这样不会看到“马赛克”现象。这种处理方式较适用于有一定景深的静态影像,不过无法提供最佳品质。其最大问题在于,当三维物体变得非常小时,一种被称为Depth Aliasing artifacts(深度赝样锯齿),也不适用于移动中的物件。
 

c)三线性过滤 Trilinear Interpolation
三线性过滤相对的比较复杂,它只能用于纹理被缩小的情况,需要先构造纹理图像的mipmap,mip的意思是“在狭窄的地方里的许多东西”,mipmap就是对最初的纹理图像构造的一系列分辨率减少并且预先过滤的纹理图。对于一个8 x 8的纹理来说需要为它构造4 x 4、2 x 2、1 x 1这三个mipmap。如果正方形被缩小到在屏幕上占6 x 6的象素矩阵,一个象素的采样过程就变成这样,首先是到8 x 8的纹理图中进行对最接近它2 x 2的纹理单元矩阵进行采样(也就是上面的线性过滤);其次是到4 x 4的纹理图中重复上面的过程;接着把上面两次采样的结果进行加权平均,得到最后的采样数据。可以看出整个过程一共进行了三次的线性过滤,所以这种方法叫做三线性过滤,它的效果是三种纹理过滤方法里面最好的。
这是一种更复杂材质影像插补处理方式,会用到相当多的材质影像,而每张的大小恰好会是另一张的四分之一。例如有一张材质影像是512×512个图素,第二张就会是256×256个图素,第三张就会是128×128个图素等等,总之最小的一张是1×1.凭借这些多重解析度的材质影像,当遇到景深极大的场景时(如飞行模拟),就能提供高品质的贴图效果。一个“双线过滤”需要三次混合,而“三线过滤”就得作七次混合处理,所以每个像素就需要多用21/3倍以上的计算时间。还需要两倍大的存储器时钟带宽。但是“三线过滤”可以提供最高的贴图品质,会去除材质的“闪烁”效果。对于需要动态物体或景深很大的场景应用方面而言,只有“三线过滤”才能提供可接受的材质品质。

d)各向异性过滤 Anisotropic Interpolation
各向异性过滤是最新型的过滤方法,它需要对映射点周围方形8个或更多的像素进行取样,获得平均值后映射到像素点上。对于许多3D加速卡来说,采用8个以上像素取样的各向异性过滤几乎是不可能的,因为它比三线性过滤需要更多的像素填充率。但是对于3D游戏来说,各向异性过滤则是很重要的一个功能,因为它可以使画面更加逼真,自然处理起来也比三线性过滤会更慢。
各异向性纹理过滤不是单独使用而是和前面所述的其他过滤方法结合一起使用的。它在取样时候,会取8个甚至更多的像素来加以处理,所得到的质量最好。
假设Px为纹理在x坐标方向上的缩放的比例因子;Py为纹理在y坐标方向上的缩放的比例因子;Pmax为 Px和Py中的最大值;Pmin为Px和Py中的最小值。当Pmax/Pmin等于1时,也就是说Px等于Py,纹理的缩放是各同向的;但是如果Pmax /Pmin不等于1而是大于1,Px不等于Py,也就是说纹理在x坐标方向和在y坐标方向缩放的比例不一样,纹理的缩放是各异向的,Pmax/Pmin代表了各异向的程度。
举个例子来说,64 x 64的纹理贴到一个开始平行于xy平面的正方形上,但是正方形绕y轴旋转60度,最后投影到屏幕上占了16 x 32的象素矩阵。纹理在x坐标方向上缩放的比例因子为64/16等于4,在y坐标方向缩放的比例因子为64/32等于2,Pmax等于4,Pmin等于 2。缩放的各异向程度为2。当把各异向性过滤和线性过滤结合起来的时候,应该是对最接近象素的4 x 2的纹理单元矩阵采样才合理,因为一个象素在x坐标方向上对应了更多的纹理单元(Px > Py)。即使是纹理在一个轴方向上缩小而在另一个轴方向上放大,处理的过程也是一样的(注意的是如果纹理在一个轴方向上缩小而在另一个轴方向上放大,OpenGL仍然把它当作是纹理被缩小的情况,将采用为纹理缩小情况设置的过滤方法为基本过滤方法,然后再加上各异向性过滤)。假设被贴图的正方形最后在屏幕上占了一个128 x 32 的象素矩阵,纹理在x坐标方向上缩放的比例因子为64/128等于0.5,在y坐标方向缩放的比例因子为64/32等于2,由于Py > Px 且 Pmax/Pmin等于4,所以当把各异向性过滤和线性过滤结合起来的时候,应该对最接近象素的2 x 8的纹理单元矩阵进行采样。三线性过滤和各异向性过滤结合的过滤方法的步骤跟前面单独的三线性过滤方法大致是一样的,只是前面两步采用了各异向性过滤和线性过滤结合的方法。
通常情况下采取线性过滤或者三线性过滤就可以得不错的效果,但是在某些特殊的情况下,特别是把一个都是线状条纹的纹理图贴到一个绕x或者是y轴旋转角度很大的多边形上的时候,比如将人的头发纹理贴到构成人的头顶的多边形,即使是三线性过滤的效果也不能令人满意,只有将各异向过滤方法和三线性过滤或者线性过滤的方法结合起来才能得到完美的效果。

  //用OpenGL实现支持的最大各异向程度设置最大各异向程度参数
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, xxx);
  // 注意:这里的 xxx 代表 各向异性过滤 的异向程度参数
  // 你可以设置为:4 , 8 , 16 等。这里也可以在 InitGL() 驱动 OpenGL 函数里写上
  int LrgSupAni;
  glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &LrgSupAni);
  那么 xxx 就得小于或等于 LrgSupAni。

Qt中的OpenGL (4)[纹理] 本文是学习OpenGL的笔记,主要参考JoeyDeVries的LearnOpenGL教程,并将教程中的代码基于Qt进行实现。 阅读详情

相关推荐

OpenGL纹理贴图

OpenGL纹理1. 基本概念2. 纹理环绕方式3. 纹理过滤3.1 GL_NEAREST3.2 GL_LINEAR3.3 多级渐远纹理 (Mipmap)4. 纹理加载与创建4.1 纹理加载4.2 纹理创建4.3 纹理的使用 1. 基本概念 纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来表示物体的细节特征,希望绘制一个有足够多细节的物体,当然可以用足够多的顶点颜色来描述,但是无疑也增加了许多额外的开销;另一种办法就是使用纹理。 学习之前先展示一张实现的纹理图以更好理解纹理! 还是这张图为了将纹

牵LV小猪精的博客 8922

Mipmap详解(有无Mipmap区别、原理、优点、缺点、优化)

一、先了解纹理过滤 想要了解为什么要使用Mipmap,首先要知道纹理过滤是什么。 当你在玩吃鸡的时候可能会发现一个现象,一个人在距离你5米的地方,可以观察到敌人的一举一动,包括身上的装备等等,但当你拿到98k时,你会蹲在远处狙击别人,这时不开镜的你看500米远处的敌人只能看到一个黑点,这其中远近看到的区别就有应用到纹理过滤。 游戏中A物体的游戏设计纹理贴图是400*400Texel(纹理像素) 1.当你(摄像机)跟A物体的距离为0时,在你屏幕上显示的像素就是400*400,跟贴图的纹理像素大小相同,

爱吃的栗子‘s 博客 7万+

【OpenGL】OpenGL入门之纹理(Texture)

目录   在此之前,我们已经可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。   由此我们使用纹理(Texture) 进行处理。纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节。因为我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点。 ...

YangMax1的博客 1万+

openGL之API学习(二零四)GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER

设置纹理过滤方式。 1、GL_TEXTURE_MIN_FILTER GL_TEXTURE_MIN_FILTER取值GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR,默认GL_NEAREST_MIPMAP_LINEA 2、GL_TEXTURE_MAG_FILTER GL_TEXTURE_MAG_FILTE

hankern的专栏 4540

OpenGL纹理详解

OpenGL纹理详解 现实生活中,纹理最通常的作用是装饰我们的物体模型,它就像是贴纸一样贴在物体表面,使得物体表面拥有图案。但实际上在OpenGL中,纹理的作用不仅限于此,它可以用来存储大量的数据,一个典型的例子就是利用纹理存储地形信息。 纹理对象和参数 现代OpenGL中,纹理对象和顶点数组对象(VAO)及缓存对象(VBO)一样,需要调用glGenTextures函数生成。 生成纹理对象 同样的,纹理对象需要进行绑定。OpenGL中纹理可以分为1D,2...

水上漂的专栏 6460

[OpenGL]OpenGl中的纹理

一、什么是纹理 据我的理解,纹理实际上就是一幅图像(一维二维or三维皆可),然后用此图像对另一个图元进行贴图(以某种规则铺上去,可能被缩放或扭曲)。 二、为什么要引入纹理 如果不引入纹理,描述一幅现实画面时,需要用基本图元(如三角面片)去仿真,这既不真实,效率又低。 三、OpenGL中如何进行纹理贴图 1. 创建纹理对象,并为它指定一个纹理 纹理对象实际上就是纹理图像,并有个纹理编号(

5701

【OpenGL学习】(六)图形添加纹理

OpenGL的纹理过滤是一种通过插值或采样技术优化纹理映射效果的方法,用于解决纹理在放大、缩小或斜视角渲染时出现的失真、锯齿或模糊问题,提升渲染质量。GL_NEAREST_MIPMAP_NEAREST:首先,根据当前片段(屏幕像素)覆盖的纹理区域大小,选择最接近的MIPMAP级别(即分辨率最匹配的那一级)。多级渐远纹理(MIPMAP)通过预生成一系列不同分辨率的纹理副本(从原始纹理到最低分辨率),使GPU能够根据片段覆盖的纹理区域大小,动态择最合适的分辨率级别进行采样,从而避免采样不足的问题。

weixin_44378835的博客 876

Vulkan入门系列16 - 生成多级纹理贴图( Mipmaps)

我们的程序现在可以加载和渲染 3D 模型了。在本章中,我们将再添加一项功能-- Mipmaps 生成。Mipmaps 广泛应用于游戏和渲染软件中,Vulkan 让我们可以完全控制 Mpmaps 的生成方式。Mipmaps 是预先计算的、缩放的图像。每个新图像的宽度和高度都是前一个图像的一半。Mipmaps 是一种细节层次(Level of Detail)或 LOD 的形式。距离摄像机较远的物体将从较小的 mip 图像中获取纹理样本。使用较小的图像可以提高渲染速度,避免出现摩尔纹等人工痕迹。

GPU全栈博主 717

LearnOpenGL——入门(四)纹理

本文介绍了纹理在计算机图形学中的应用及其相关概念。纹理作为2D图像可用于增强物体细节,相比顶点着色更高效。文章详细讲解了纹理坐标系统、纹理环绕方式(重复、镜像、边缘拉伸等)和纹理过滤技术(邻近过滤和线性过滤),并分析了它们在不同场景下的视觉效果。此外,还介绍了多级渐远纹理(Mipmap)技术,用于优化远距离物体的纹理渲染性能。最后简要提及了纹理加载的注意事项,为后续纹理应用奠定基础。

QQ805009795的博客 654

OpenGL中纹理贴图、滤波、光照和雾化效果编程初步

OpenGL中纹理贴图、滤波、光照和雾化效果编程初步 源代码

开源人形机器人硬件生态:关键技术、产业链与低成本突破 | OpenLoong 社区线下分享会

本文将深入探讨人形机器人硬件平台的关键技术、产业链与核心部件以及降低成本的策略。从硬件平台的核心技术,到机器人核心零部件的详细介绍,再到产业链各环节的协同发展以及实现低成本化的创新思路,将一同剖析人形机器人迈向广泛应用所面临的挑战与机遇,展望其未来的发展趋势,为开发者和相关从业者提供一些参考与启示。

OpenLoong_的博客 2419

OpenGL 纹理

纹理是什么,图片的坐标轴向在 OpenGL 中,纹理(Texture)是一种用于存储和管理二维图像数据的机制。它是一种非常重要的渲染技术,可以大大增强 3D 场景的细节和真实感。纹理的基本概念纹理图像纹理是由一个或多个二维图像组成的,也存在1D or 3D。这些图像包含了丰富的颜色和细节信息。纹理坐标纹理坐标是一个二维坐标系统,用于描述纹理图像上的某个位置。纹理坐标通常用 (s, t) 来表示,取值范围为 [0, 1]。还有r 和xyz相似。纹理映射将纹理图像映射到 3D 模型表面的过程叫做纹理映射。

weixin_50873490的博客 1398

生存分析机器学习问题

然而,随着人工智能 (AI) 和机器学习 (ML) 的兴起,科学家现在能够开发更复杂的模型,揭示这些数据集中的模式和特征,从而为癌症的生物学、诊断、预后、治疗和预后提供新的见解。病情更重的患者可能接受更强(或更弱)的治疗,导致治疗方案与不良预后(死亡)强相关。数据集中包含失访或研究结束时仍存活的患者(删失数据),他们的真实生存时间未知,仅知道其存活时间不低于观察到的最后一次随访时间。优先选择参数少、结构简单的模型(如带强正则化的线性模型、简单树模型),避免复杂模型(如深度神经网络)。时刻的状态是未知的。

4AM_明朝百晓生 1222

【OpenGL】纹理

在OpenGL中文手册上扩展和补充,采用QT进行开发,原生C++版本教程,请点击此处参考OpenGL CN本章节源码请。

qq_45280097的博客 1774

NVIDIA Video Codec SDK-解码接口cuvid简介

特性已废弃的 NVCUVID现代的 NVDECODE (底层 API)现代的 NVDECODE (高层 API - NvDecoder)状态已废弃 (Deprecated)官方推荐 (底层控制)官方推荐 (易用性首选)编程模型C 函数C 函数C++ 类复杂度高,需要管理大量细节中高,仍需管理解码会话低,开箱即用灵活性高高中(满足绝大多数场景)推荐对象遗留项目维护需要极致控制的高级用户所有新项目、大多数开发者。

fudexiang的博客 1175

可编程逻辑控制器(PLC)系列:Mitsubishi MELSEC-Q_(8).MELSEC-Q系列PLC故障诊断与维护

MELSEC-Q系列PLC的故障诊断与维护是一个系统性的过程,需要工程师具备扎实的理论基础和丰富的实践经验。通过了解故障类型、使用诊断工具、遵循诊断步骤,可以有效地定位和解决故障问题。同时,定期的检查与保养、备份与恢复、优化程序和配置,以及提供良好的运行环境,可以减少故障的发生,提高系统的可靠性。希望本文能够帮助工程师在故障诊断与维护过程中更加得心应手,确保MELSEC-Q系列PLC的稳定运行。

2401_87715305的博客 1247

opengl 学习纹理

这会为当前绑定的纹理自动生成所有需要的多级渐远纹理。多级渐远纹理背后的理念很简单:距观察者的距离超过一定的阈值,OpenGL会使用不同的多级渐远纹理,即最适合物体的距离的那个。这样没有任何效果,因为多级渐远纹理主要是使用在纹理被缩小的情况下的:纹理放大不会使用多级渐远纹理,为放大过滤设置多级渐远纹理的选项会产生一个GL_INVALID_ENUM错误代码。注意不要和纹理坐标搞混,纹理坐标是你给模型顶点设置的那个数组,OpenGL以这个顶点的纹理坐标数据去查找纹理图像上的像素,然后进行采样提取纹理像素的颜色。

cs821984831的博客 1932

【QT开发教程】Qt中的数据加密与解密

在现代应用程序中,数据加密与解密是保护敏感信息的重要手段。Qt本身并不直接提供数据加密与解密的支持,但可以使用第三方库,如OpenSSL或Crypto++,来实现这一功能。本文将介绍如何在Qt中使用OpenSSL进行数据加密与解密,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 1154

OpenGL:纹理

OpenGL:纹理

肖云鹤的博客 2967

PSINS工具箱学习(四)捷联惯导更新算法

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning。

实践出真理,接毕设/课设项目开发指导 604

基于Simulink的四足机器人楼梯攀爬仿真模型

构建一个基于Simulink的四足机器人楼梯攀爬仿真模型,旨在模拟四足机器人在面对楼梯等障碍时的运动控制和稳定性调整。以下是一个详细的步骤指南,帮助你从零开始创建这样一个仿真模型。

xiaoheshang_123的博客 247

OpenGL Texture 纹理

Texture 纹理纹理是一个2D图片(也可以是一个1D和3D的纹理) 效果如下(https://github.com/curtain521517/learnOpenGL)为了能够映射到三角形上,需要三角形的每个顶点对应各自的**纹理坐标(**Texture Coordinate) 纹理在xy轴上范围是0-1(2D),使用纹理坐标获取纹理颜色叫采样 如下图 纹理环绕方式 环绕方式(Wrap

阿凡的专栏 1万+

AI: 机器学习的模型是如何训练的?(在试错中学习)

一句话理解机器学习一般训练过程 :通过有标签样本来调整(学习)并确定所有权重Weights和偏差Bias的理想值。 训练的目标:最小化损失函数 (损失函数下面马上会介绍) 机器学习算法在训练过程中,做的就是:检查多个样本并尝试找出可最大限度地减少损失的模型;目标就是将损失(Loss)最小化 在这里插入图片描述 上图就是一般模型训练的一般过程(试错过程),其中 模型: 将一个或多个特征作为输入,然后返回一个预测 (y’) 作为输出。为了进行简化,不妨考虑一种采用一个特征并返回一个预测的模型,如下公式

HowieXue 薛永浩的博客 3万+

3.opengl的纹理

图形,渲染,OpenGl

x13262608581的博客 1029

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

1.理解纹理   OpenGL中的纹理可以用来表示图像,照片,甚至由一个数学算法生成的分形数据。每个二维的纹理都由许多小的纹理元素组成,它们是小块的数据,类似于我们前面讨论过的片段和像素。要使用纹理,最常用的方式是直接从一个图像文件加载数据。   每个二维纹理都有其自己的坐标空间,其范围是从一个拐角的(0,0)到另一个拐角的(1,1)。按照惯例,一个维度叫做S,而另一个称为T。当我们想要把

李元静 6685

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android OpenGL ES详解——纹理:纹理过滤GL_NEAREST和GL_LINEAR的区别

具体来说,当设置为GL_LINEAR时,OpenGL会考虑采样点周围最近的四个纹理像素(一个正方形区域内的像素),并对这四个像素的颜色值进行加权平均,以得到平滑过渡的颜色。下图中你可以看到四个像素,加号代表纹理坐标。GL_NEAREST产生了颗粒状的图案,我们能够清晰看到组成纹理的像素,而GL_LINEAR能够产生更平滑的图案,很难看出单个的纹理像素。注意不要和纹理坐标搞混,纹理坐标是你给模型顶点设置的那个数组,OpenGL以这个顶点的纹理坐标数据去查找纹理图像上的像素,然后进行采样提取纹理像素的颜色。

闲暇部落 1801

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 关于TOMCAT5.5的SSL配置
下一篇: Android源码路径简要分析
sharp2wing
博客等级 码龄19年 5粉丝 89原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值