网页功能: 加入收藏 设为首页 网站搜索  
使用三线过滤或各向异性过滤提高纹理质量
发表日期:2007-03-28作者:[转贴] 出处:  

 最近很偶然的注意到了 CS 2.0 渲染处理里面有一个叫纹理过滤的功能,可以选择:双线过滤,三线过滤,各向异性过滤。试看画面效果后,感觉确实不错,于是找这有关的资料。
------------------------------------
Bilinear Interpolation (双线过滤)
这是一种较好的材质影像插补的处理方式,会先找出最接近像素的四个图素,然后在它们之间作差补效果,最后产生的结果才会被贴到像素的位置上,这样不会看到 “马赛克”现象。这种处理方式较适用于有一定景深的静态影像,不过无法提供最佳品质。其最大问题在于,当三维物体变得非常小时,一种被称为 Depth Aliasing artifacts(深度赝样锯齿),也不适用于移动中的物件。

Trilinear Interpolation (三线过滤)
这是一种更复杂材质影像插补处理方式,会用到相当多的材质影像,而每张的大小恰好会是另一张的四分之一。例如有一张材质影像是512×512个图素,第二张就会是256×256个图素,第三张就会是128×128个图素等等,总之最小的一张是1×1.凭借这些多重解析度的材质影像,当遇到景深极大的场景时(如飞行模拟),就能提供高品质的贴图效果。一个“双线过滤”需要三次混合,而“三线过滤”就得作七次混合处理,所以每个像素就需要多用21/3倍以上的计算时间。还需要两倍大的存储器时钟带宽。但是“三线过滤”可以提供最高的贴图品质,会去除材质的“闪烁”效果。对于需要动态物体或景深很大的场景应用方面而言,只有“三线过滤”才能提供可接受的材质品质。

Anisotropic Interpolation (各向异性过滤)
它在取样时候,会取8个甚至更多的像素来加以处理,所得到的质量最好。

-----------------------------------
在 OpenGL  里我尝试使用 三线过滤 ,出来的画面平滑感觉比 各向异性过滤的还要好点。哈,我就觉得三线过滤效果比各向异性过滤效果好点。在国内的网站上很少关于  OpenGL 使用这三线过滤和各向异性过滤的文章,有的都是理论,没有代码,我看了一个国外的代码。其实就是在加载纹理的时候把代码改为:

// <<<三线过滤>>>
 //设置纹理缩小时采用的过滤方法,这里设置的是三线性过滤
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
 //设置纹理放大时采用的过滤方法,这里设置的是线性过滤
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 //用OpenGL实现支持的最大各异向程度设置最大各异向程度参数
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0f);

// <<<各向异性过滤>>>
 //设置纹理缩小时采用的过滤方法,这里设置的是三线性过滤
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
 //设置纹理放大时采用的过滤方法,这里设置的是线性过滤
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 //用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。

我都是使用 1.0f ,就是三线过滤,不理那个各向异性过滤的,哈,你喜欢吧。

:要是上面有什么不对的地方请指教,哈,原谅啊,个人知识有限。
还有,对于 OpenGL 有啥问题可以找俺交流交流。我最近在学习 GLSL ,写那个 shader 真的有点烦,请大家指点指点。给个意见。哈哈,继续学习 shader 去。

(荔枝 2006.3.14)
QQ:444163200 
MSN:GreenLitchi@163.com
E-mail:GreenLitchi@163.com

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 使用三线过滤或各向异性过滤提高纹理质量
本类热点文章
  DDraw和D3D立即模式编程手册
  矩阵求逆的快速算法
  本地化支持:OGRE+CEGUI中文输入:OGRE方..
  Direct3D中实现图元的鼠标拾取
  3D场景中的圆形天空顶
  OpenGL显卡编程
  一种高效的基于大规模地形场景的OCCLUS..
  一个完善的读取3DS文件例子
  如何制作一个可控制的人体骨骼模型
  Direct3D 入门之我见
  Slope(斜坡) 法线生成算法,在地形渲染..
  在Direct3D中渲染文字
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00538