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}41​和116\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 = 0p1∗x+p2∗y+p3∗z+p4=0,三维空间中顶点到平面的距离计算为:
d=p1∗x+p2∗y+p3∗z+p4d = p1 * x + p2 * y + p3 * z + p4d=p1∗x+p2∗y+p3∗z+p4,则GL_OBJECT_LINEAR中的纹理坐标计算:

g=p1∗x+p2∗y+p3∗z+p4∗wg = p1 * x + p2 * y + p3 * z + p4 * wg=p1∗x+p2∗y+p3∗z+p4∗w,一般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

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

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

  1. 初识OpenGL (-)纹理过滤(Texture Filtering)

    1. OpenGL需要知道怎样将纹理像素(Texture Pixel,也叫Texel)映射到纹理坐标. 纹理坐标 不依赖于分辨率(Resolution),它可以是任意浮点值, 给模型顶点设置的那个数组 ...

  2. 手把手教会OpenGL之纹理贴图、包含纹理载入、纹理过滤、边界处理、纹理参数设置(入门级别案例,棋盘)

    一.OpenGL中纹理的加载(对glTexImage2D函数的使用) 二.纹理过滤(glTexParameteri参数中的GL_TEXTURE_MAG_FILTER与 GL_TEXTURE_MIN_F ...

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

    目录 纹理 纹理环绕方式 纹理过滤 多级渐远纹理(Mipmap) 加载与创建纹理 stb_image.h 生成纹理 应用纹理 纹理单元 参考 纹理   在此之前,我们已经可以为每个顶点添加颜色来增加图 ...

  4. 纹理过滤模式中的Bilinear、Trilinear以及Anistropic Filtering

    转载自:http://www.cnblogs.com/cxrs/archive/2009/10/18/JustAProgramer.html 1. 为什么在纹理采样时需要texture filter( ...

  5. MipMap(纹理过滤)

    MipMap 首先从MIPMAP的原理说起,它是把一张贴图按照2的倍数进行缩小.直到1X1.把缩小的图都存储起来.在渲染时,根据一个像素离眼睛为之的距离,来判断从一个合适的图层中取出texel颜色赋值 ...

  6. 图形学常见概念与算法-纹理过滤

    目录 什么是纹理过滤 OpenGL中如何设置 多级渐远纹理 什么是纹理过滤 缩小或放大纹理时,一个像素会被放到几个像素的位置,或者几个像素放到一个位置,怎样去融合就是texture filtering ...

  7. 纹理过滤中的双线,三线过滤

    2019独角兽企业重金招聘Python工程师标准>>> 为什么在纹理采样时需要texture filter(纹理过滤). 我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中 ...

  8. 【转】glTexImage2D()和gluBuild2DMipmaps() [将载入的位图文件(*.bmp)转换成纹理贴图]+glTexParameteri()纹理过滤函数...

    glTexImage2D()和gluBuild2DMipmaps() 说明:两者的都是生成纹理,即:将载入的位图文件(*.bmp)转换成纹理贴图. glTexImage2D()的用法举例 glTexI ...

  9. OpenGL纹理过滤以及纹理Wrapping mode

     在三维动态场景中,如果一个纹理对象迅速地远离观察点而去,此时纹理图像必须随被投影的图像一起缩小,否则很产生抖动或者闪烁的现象.为了避免产生抖动或者闪烁,OpenGL必须对纹理图像进行过滤,适当的 ...

最新文章

  1. 1月28日昆山杜克大学和西交利物浦大学太仓校区参观有感
  2. 思考问题的“六顶帽子”
  3. cocos2dx 圆盘抽奖_cocoscreator之微信小游戏的抽奖转盘
  4. slf4j-log4j12-1.5.8.jar有什么用
  5. 开源框架 Apache Struts 2漏洞的 PoC 已公开
  6. 人工智能:从单细胞生物的智能说起
  7. 分段式多级离心泵_D型卧式多级泵结构组成及工作原理
  8. 计算机怎么开启tftp服务器,win7电脑如何开启tftp服务器 电脑开启tftp服务器操作方法...
  9. realtek高清晰音频管理器怎么关闭的方法
  10. 在Expression Blend中制作侧面为梯形的类棱柱体
  11. 创业管理:创业者的十八般武艺——1.2 创业者素质体系(1)
  12. JavaEE——No.2 套接字编程(TCP)
  13. css实现视频文字特效
  14. 什么是favicon.ico,以及如何使用它
  15. 韦东山 android 淘宝,韦东山-android音频子系统中audio_policy.conf的usb声卡理解 - 百问网嵌入式问答社区...
  16. 数组中出现次数超过一半的数字
  17. getservbyname 及 struct servent
  18. 四川金弘同创:拼多多推广方式在哪里设置
  19. 树莓派魔镜MagicMirror —— 7 安装MagicMirror
  20. vue3版本网页小游戏

热门文章

  1. 检测笔记本电脑的主板,cpu,硬盘的温度
  2. 人类一败涂地怎么正在连接服务器,人类一败涂地联机显示正在连接服务器解决办法...
  3. 本地搭建我的世界服务器(可联机)
  4. 运动控制专题——PPU
  5. 基尔霍夫电流定律KCL,基尔霍夫电压定律KVL
  6. 巴曙松:寻找可持续的经济复苏
  7. cron表达式及其验证方法
  8. itween的抛物线线性移动
  9. RequireJS - 用法
  10. php和android和mysql_如何使用JSON连接Android和PHP Mysql数据库