MipMap

MipMap

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

 

 

透过它的工作原理我们可以发现,硬件总是根据眼睛到目标的距离,来选取最适合当前屏幕像素分辨率的图层。假设一张32768x32768的mipmap贴图,当前屏幕分辨率为1024*1024。眼睛距离物体比较近时,mipmap最大也只可能从1024*1024的Mipmap图层选取texel。再次,当使用三线性过滤(trilinear)时,最大也只能访问2048*2048的图层选取texel,来和1024*1024图层中的像素进行线性插值。

为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map 或者 mipmap

 

多级渐进纹理由一组分辨率逐渐降低的纹理序列组成,每一级纹理宽度和高度都是上一级纹理宽度和高度的一半。宽和高不一定相等,也就是说,这些纹理不一定都是正方形。

Direct3D在纹理映射时,自动选择一幅与物体大小最接近的纹理进行渲染。当物体离投影平面较远时,Direct3D会选择一张尺寸较小、分辨率较低的纹理进行渲染;当物体离投影平面较近时,Direct3D会选择一张尺寸较大、分辨率较高的纹理进行渲染。Direct3D将纹理序列看成一条多级渐进纹理链。链头处纹理的分辨率最高,下一级往后依次递减,链尾处纹理的分辨率最低。

Direct3D能估计出多级渐进纹理链中哪幅纹理的分辨率最接近想要的输出结果,然后它将像素映射到纹理空间。当最终显示的图形大小介于任意两级纹理图形之间时,Direct3D将两级纹理的相应元素进行混合后显示。

多级渐进纹理过滤能够有效地提高图形渲染速度,当物体离投影平面较远时,Direct3D会选择一张尺寸较小的纹理进行渲染,而无需经过复杂的诸如各项异性纹理过滤,并且由于这时纹理需要的显存比不使用多级渐进纹理时小,因此能有效地减少纹理载入显存的时间。缺点是对内存的要求比较高

 

 

 

设置多级渐进纹理过滤方式

当最终显示的纹理贴图大小介于任意两级纹理之间时,Direct3D能够取得两级纹理元素进行混合后显示,具体的混合方式由指定的多级渐进纹理过滤方式决定。可以调用函数IDirect3DDevice9::SetSamplerState()设置多级渐进纹理过滤方式,将第一个参数设为纹理层序号,第二个参数设为D3DSAMP_MIPFILTER表示多级渐进纹理过滤,第三个参数设为在相邻纹理级之间的过滤方式,可取枚举类型D3DTEXTUREFILTERTYPE的任意值。下面的示例代码设置相邻纹理级之间的过滤方式为线性过滤。

g_device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

如果将第三个参数设为D3DTEXF_NONE,那么就会一直使用最高一级的纹理,即禁用多级渐进纹理过滤。如果将其设为D3DTEXF_POINT,就会只使用与图元大小最匹配的一级纹理。如果将其设为D3DTEXF_LINEAR,Direct3D就将与图元大小最匹配的两级纹理以线性方式混合。

需要注意的是,多级纹理过滤是缩小和放大过滤器的结合。例如,如果将缩小和方法过滤器设为线性过滤,但是多级纹理过滤方式设为最近点采样,Direct3D就会选择与要显示的纹理贴图大小最接近的纹理级别,在该级纹理上完成双线性纹理过滤,并将结果作为像素的值。如果将缩小、放大过滤器和多级渐进纹理都设置为线性过滤,则Direct3D就会在两个最接近的纹理级别上都进行双线性纹理过滤,然后再对相邻两级纹理图形上对应的两个纹理颜色进行加权平均,最后的结果作为单个像素值。这种为了图元中的一个像素,而结合了两幅纹理,共8个像素的技术,称为“三线性过滤”,因为它在纹理的三个方向----u、 v和纹理级别上都进行了线性过滤。

可以通过IDirect3DDevice9::SetSamplerState()函数设置实际渲染时纹理过滤的最大级数,其中需要将第二个参数设为D3DSAMP_MAXMIPLEVEL,第三个参数设为实际渲染时纹理过滤的最大级数。下面的示例代码设置纹理层0的最大多级纹理过滤级数为16。

g_device->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, 16);

还可以通过将IDirect3DDevice9::SetSamplerState()的第二个参数设为D3DSAMP_MIPMAPLODBIAS,设置多级纹理映射级数偏移值。如果对某个纹理映射设置正偏移值,得到的图形结果就会比原来的更清晰,但锯齿更多;反之设为负偏移值,得到的图形结果就会更模糊。

 

代码:实例下载

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

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

相关文章

计算机一级繁体字转换,繁体字转换器

有的朋友偏爱繁体字书写对联,繁体字对联看着也更端庄大气,今天出国留学网小编给大家整理提供了关于春节对联繁体字的精彩内容,欢迎阅读。通用春节对联大全带横批1. 上联:大順大財大吉利下联:新春新喜新世紀【橫批】&am…

ln 命令

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录&#xff0…

行内元素中间出现空隙

设置父级为font-size:0;转载于:https://www.cnblogs.com/yaser/p/4379572.html

windows2016服务器优化,Windows Server 2012 服务器优化图文方法

这篇文章主要介绍了Windows Server 2012 服务器优化图文方法,需要的朋友可以参考下1、显示桌面图片按下WinR键输入:rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,02、关闭IE增强的安全配置1.开启【服务器管理员】单击"服务器管理员"2.在左边窗格切…

StringBuffer与StringBuilder

有些时候,需要由较短的字符串构建字符串。比如,按键或来自文件中的单词。采用字符串连接的方式达到此目的效率比较低。每次连接字符串的时候,都会构建一个新的String对象,既耗时,又浪费空间。使用StringBuilder类就可以…

ExtJs控件属性配置详细(转)

序言: 1.本文摘自网络,看控件命名像是4.0以前的版本,但控件属性配置仍然可以借鉴(不足之处,以后项目用到时再续完善)。 Ext.form.TimeField: 配置项: maxValue:列表中允许…

网站服务器中病毒该如何处理,网站被中了木马无法删除怎么办? 解决网站中病毒的办法...

紧急预警“XXCMS整站系统(XXCMS)”官方安装包被植入后门这是我们 前几天在站长网上公布的紧急预警! 但是还是有人中招了,服务器中了马,导致网站被挂了黑链,我们外星人源码安全小姐紧急响应,马上为其清除木马后门,查杀病…

ThinkPHP 的URL重写时遇到No input file specified的解决方法

因为在Fastcgi模式下,php不支持rewrite的目标网址的PATH_INFO的解析 ThinkPHP运行在URL_MODEL2时,会出现 No input file specified.的情况, 这时可以修改网站目录的.htaccess文件: RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] …

sql语句中----删除表数据drop、truncate和delete的用法

说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大------drop 出没场合:drop table tb --tb表示数据表的名字,下同 绝招:删除内…

wowbl最优势的服务器,CWOW中BL为什么远远多于LM一个新手之见

眨眨眼,在WOW的日子也有半年多了,虽然称不上什么高手,但偶尔也有几次"高手"般的表现,不多说废话了,切如正题.CWOW中BL人数上是绝对性优势的压倒LM,为什么会有这样的现象呢?大家仔细观察就会知道,每当建立新人物时,第一默认任务就是亡灵,而对于大多数新手来说他们也不…

linux 文件夹的颜色代表什么意思

linux 文件夹的颜色代表什么意思 绿色 蓝色 黑色代表什么意思 蓝色表示目录; 绿色表示可执行文件; 红色表示压缩文件; 浅蓝色表示链接文件; 灰色表示其它文件; 红色闪烁表示链接的文件有问题了; 黄色是设备…

设计模式之禅之六大设计原则-依赖倒置原则

依赖倒置原则依赖倒置原则的原始定义是:● 高层模块不应该依赖低层模块,两者都应该依赖其抽象;● 抽象不应该依赖细节;● 细节应该依赖抽象。那什么是抽象?什么又是细节呢?---->在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类…

ajax改变json指向,Ajax遍历jSon后对每一条数据进行相应的修改和删除(代码分享)

废话不多说了&#xff0c;直接给大家贴代码了&#xff0c;具体代码如下所示&#xff1a;$.ajax({url: "/business/findpersons.json",dataType: "json",type:"GET",success: function(doc) {var objseval(doc);for (var i 0; i < objs.lengt…

***使用PHP实现文件上传和多文件上传

http://www.365mini.com/page/php-upload-file.htm 在PHP程序开发中&#xff0c;文件上传是一个使用非常普遍的功能&#xff0c;也是PHP程序员的必备技能之一。值得高兴的是&#xff0c;在PHP中实现文件上传功能要比在Java、C#等语言中简单得多。下面我们结合具体的代码实例来详…

ajax 如何使 dropdownlist 无刷新,Jquery实现无刷新DropDownList联动实现代码

先看HTML,我们引用Jquery,放两个DropDownList:#ddlEmployeeCars{display:none;position:absolute;top:50px;left:9px;}接着写核心的Script:$(function() {var $ddl $("select[name$ddlEmployee]");var $ddlCars $("select[name$ddlEmployeeCars]");$ddl.…

famous javascript library.

https://famo.us/ THE ULTIMATE WEB PLATFORM FOR DEVELOPERS AND DESIGNERS转载于:https://www.cnblogs.com/feika/p/4382525.html

MyEclipse/Eclipse 中使用javap

-c -classpath ${workspace_loc}\${project_name}\bin ${java_type_name} 特别强调我所掉过的一个坑&#xff1a;这行配置bin后面空一格而非\&#xff0c;就这个小问题让我吃了苦头 有知道原因的望告知。。。。。。。真想了解原因 转载于:https://www.cnblogs.com/blueFlowers…

怎样王远端服务器上传文件,传王电子传真使用指南-Freefax传真服务器,传王A6,免费传真...

接线方案传王A6品牌宣传为『传王&#xff0c;最棒的&#xff01;传王&#xff0c;传真之王。』,并不是一句空泛的宣传。传王A6充分考虑用户的办公环境&#xff0c;能与电话很好地混合使用&#xff0c;通过不同的接线方案&#xff0c;配合丰富的权限管理和系统设定&#xff0c;满…

《梦断代码》阅读笔记之第8章至最后

以下是我读了梦断代码第八章之后的读书笔记&#xff1a; 1.自己做的软件自己一定要用&#xff0c;即“吃你自己的狗食”&#xff0c;自己的软件开发出来后自己都不会用那么还要指望别人用不成&#xff1f; 2.在软件开发编写代码的时候&#xff0c;当你把系统的一块新部件放进去…

《JavaScript高级程序设计》chapter 1: javascript 简介

1.2.2 文档对象模型DHTML的出现让开发人员无需重新加载页面就可以修改其外观了。1.2.3 浏览器对象模型&#xff08;BOM&#xff09;BOM真正与众不同的地方在于他作为javascript实现的一部分&#xff0c;但是却没有相关的标准。这些问题咋html5中得到解决。人们习惯上把所有针对…