mipmap其实就是一系列的纹理,其中,第一个成员拥有最多的细节,接下来的纹理大小减少为上一张的一半。举个例子,假设有一张原大小为256×256的“高分辨率”纹理,那么下一级别的mipmap就是128×128的,再下来就是64×64的,以此类推。Direct3D就通过mipmap链来控制渲染时纹理的质量,当然,代价是mipmap将会消耗更多的内存。当对象离摄像机很近的时候,使用高质量的纹理,而物体远离摄像机时,就是用低分辨率的纹理。
当创建纹理时,可以使用参数来指定有多少个层次包含在纹理中。这里层次的数目直接与mipmap链相对应。把这个参数设置为0,Direct3D则会自动在mipmap链中创建一系列纹理,从原始纹理的大小开始,一直递减到大小为1×1。在我们所举的例子中,在一张256×256的纹理上把这个参数设为0,将会创建9个纹理:256×256、128×128、64×64,32×32、16×16,8×8,4×4、2×2、1×1。
缓冲区 缓冲区用来储存着色的像素(影像)在视频内存中的区域。缓冲区的大小由解析度和色深决定,例如800x600,16bit色的缓冲区就占用800x600x2(16bit=2bytes)的内存区域。
(1) 前置Buffer是当前显示在萤幕上的缓冲区,后置Buffer是尚未显示在萤幕上的缓冲区。
(2) Single Buffering使用一个前置缓冲区,在着色的同时影像立即显示在萤幕上。因此当萤幕更新影像时会出现闪烁的现象。Single Buffering在目前的程序中已很少使用。
(3) Double Buffering则使用两个缓冲区,一个前置Buffer,一个后置Buffer。所谓前置和后置是相对而言的。前置缓存的像素在屏幕上显示的同时,显卡正在紧张地着色后置缓存中的像素。后置缓存的像素上色完毕后是以Vsync信号的形式等待。在前置缓存和后置缓存交换后,新一轮的着色工作又重新开始。这正如舞台话剧中前台和后台的演员一般。在前台演员表演时,后台的演员仍在进行最后的排练。前台的演员下场时正是后台演员登场的时间。唯一不同的是前置和后置缓存是循环轮番上阵,而演员表演完毕一般都不再出场。目前大多数游戏内定都使用Double Buffering。
(4) Triple Buffering使用一个前置缓存和两个后置缓存。在着色完第一个后置缓冲区的数据后,立即开始处理第二个后置缓冲区。今天,不少新游戏都采用的是Triple Buffering,Trible Buffering正逐渐成为发展的趋势,因为它没有Vsync(萤幕的垂直刷新频率)等待的时间,游戏也将更加流畅。Triple Buffering也是3Dmark2000测试的内定值设定。
歡迎光臨 2DJGAME! NOVO (https://bbs4.2djgame.net/HOME/) | Powered by Discuz! X2.5 |