• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Mipmap 和 ClipMap (轉(zhuǎn)載)

            Posted on 2009-03-22 17:24 Herbert 閱讀(776) 評論(0)  編輯 收藏 引用

            MipMap 機(jī)制

                     Mipmap是目前應(yīng)用最為廣泛的紋理映射技術(shù)之一。Willams將低一級圖像的每邊的分辨率取為高一級圖像的每邊的分辨率的二分之一,而同一級分辨率的紋理組則由紅、綠、藍(lán)三個(gè)分量的紋理數(shù)組組成。由于這一個(gè)查找表包含了同一紋理區(qū)域在不同分辨率下的紋理顏色值,因此被稱為Mipmap。Mipmap可以用一個(gè)四棱錐來描述。,如圖所示。該四棱錐的總層數(shù)為 ,S為初始紋理圖像每邊的分辨率。若最底層圖像為給定的原始圖像,則第二層圖像可以由最底層圖像與邊長為2個(gè)象素的正方形濾波器做卷積運(yùn)算得到。一般的,第 層圖像可以由第 層圖像與邊長為 個(gè)象素的正方形濾波器做卷積運(yùn)算得到。例如,某一紋理圖像的Mipmap的層數(shù)為10層,第10層圖像為一個(gè)象素,它由原始圖像經(jīng)與邊長為512個(gè)象素的正方形濾波器做卷積運(yùn)算壓縮得到,其分辨率為1×1。    Mipmap紋理映射在確定屏幕上每一象素內(nèi)可見的平均紋理顏色時(shí)需要計(jì)算三個(gè)參數(shù),即屏幕象素中心在紋理平面上映射點(diǎn)的坐標(biāo) 和屏幕象素內(nèi)可見表面在紋理平面上所映射的邊長d。其中 取屏幕象素內(nèi)可見表面在紋理平面上近似正方形映射區(qū)域的中心,d取該近似正方形的邊長。顯然,d決定了應(yīng)該在哪一級分辨率的紋理圖像平面上查找Mipmap表。雖然我們很容易通過紋理映射變換和取景變換的逆變換求得屏幕象素中心在紋理平面上映射點(diǎn)的參數(shù)坐標(biāo) ,但是d的值確不容易確定。一般而言,d的取值應(yīng)使得在紋理平面上以 為中心,d為邊長的正方形盡可能地覆蓋屏幕象素地實(shí)際映射區(qū)域,從而可取該正方形內(nèi)平均紋理顏色值作為屏幕象素實(shí)際映射區(qū)域的平均紋理顏色的近似值。在實(shí)際處理時(shí),可取d為屏幕象素在紋理屏幕上映射區(qū)域的最大邊長。


            OpenGL中的Mipmap紋理貼圖

                     OpenGL實(shí)現(xiàn)了Mipmap的功能。void glTexImage2D ( GLenum target, GLint level, GLint components, GLsizei width, glsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels)函數(shù)定義一個(gè)二維紋理映射。參數(shù)target是常數(shù)GL_TEXTURE_2D。參數(shù)level表示多級分辨率的紋理圖像的級數(shù),若只有一種分辨率,則level設(shè)為0。參數(shù)components是一個(gè)從1到4的整數(shù),指出選擇了R、G、B、A中的哪些分量用于調(diào)整和混合,1表示選擇了R分量,2表示選擇了R和A兩個(gè)分量,3表示選擇了R、G、B三個(gè)分量,4表示選擇了R、G、B、A四個(gè)分量。參數(shù)width和height給出了紋理圖像的長度和寬度,參數(shù)border為紋理邊界寬度,它通常為0,width和height必須是2m+2b,這里m是整數(shù),長和寬可以有不同的值,b是border的值。紋理映射的最大尺寸依賴于OpenGL,但它至少必須是使用64x64(若帶邊界為66×66),若width和height設(shè)置為0,則紋理映射有效地關(guān)閉。參數(shù)format和type描述了紋理映射的格式和數(shù)據(jù)類型,參數(shù)format可以是GL_COLOR_INDEX、GL_RGB、GL_RGBA、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_LUMINANCE或GL_LUMINANCE_ALPHA(注意:不能用GL_STENCIL_INDEX和GL_DEPTH_COMPONENT)。類似地,參數(shù)type是GL_BYPE、GL_UNSIGNED_BYTE、GL_SHORT、 GL_UNSIGNED_SHORT、GL_INT、GL_UNSIGNED_INT、GL_FLOAT或GL_BITMAP。參數(shù)pixels包含了紋理圖像數(shù)據(jù),這個(gè)數(shù)據(jù)描述了紋理圖像本身和它的邊界。紋理映射是一個(gè)相當(dāng)復(fù)雜的過程,OpenGL最基本的執(zhí)行紋理映射所需的步驟主要是:1)定義紋理glTexImage2D();2)控制濾波 glTexParameterf();3)說明映射方式glTexEnvf();4)繪制場景,給出頂點(diǎn)的紋理坐標(biāo)和幾何坐標(biāo)glEnable(GL_TEXTURE_2D)和glTexCoord2f()。紋理映射只能在RGBA方式下執(zhí)行,不能運(yùn)用于顏色表方式。Clipmap機(jī)制
            針對Mipmap的一些缺點(diǎn),提出了Clipmap方法。Clipmap方法首先對原始大紋理創(chuàng)建Mipmap,然后選擇一個(gè)分割尺寸,再把每一個(gè)Mipmap層分割成矩形網(wǎng)格狀的片,避免了傳統(tǒng)方法先把大紋理分割成小紋理再進(jìn)行Mipmap過濾,而必須處理紋理邊界的做法。這種分割是在大紋理被指定在單一的坐標(biāo)系統(tǒng)中,對MMipmap每一層進(jìn)行的,與幾何無關(guān)。Clipmap的優(yōu)點(diǎn)在于沒有把整個(gè)影像金字塔的紋理裝入內(nèi)存,而是將裁剪中心周圍一定范圍內(nèi)的紋理通過裁剪裝入內(nèi)存。通過這種方法,分辨率最高的紋理只覆蓋了幾何模型的一小部分,而分辨率較低的紋理占了大部分。需要貼圖的部分只是Clip-mapping的一小部分。圖3-4的1)顯示出,Clipmap的優(yōu)點(diǎn)在于沒有把整個(gè)影像金字塔的紋理裝入內(nèi)存,而是將裁剪中心周圍一定范圍內(nèi)的紋理通過裁剪裝入內(nèi)存。通過這種方法,分辨率最高的紋理只覆蓋了幾何模型的一小部分,而分辨率較低的紋理占了大部分。圖3-4的2)顯示出,需要貼圖的部分只是Clip-mapping的一小部分。裁剪中心(ClipCenter)是一個(gè)任意的紋理坐標(biāo),在0層(最高分辨率層)指定一個(gè)裁剪中心,其它高層可由此導(dǎo)出,各層中心都沿一條線對中,從0層的中心直到Mipmap的頂點(diǎn)。在Mipmap的每一層,通過裁剪中心(ClipCenter)和裁剪尺寸(ClipSize)的定義就精確地選擇了要裁剪的區(qū)域,裁剪下來的這些固定大小的矩形區(qū)域叫裁剪區(qū)(Clipregion)。經(jīng)裁剪后的Mipmap形成了ClipTexture。ClipTexture是繪制每一幀所需要的Mipmap的小子集,其存儲空間小可以克服硬件容量和帶寬的限制。ClipTexture的整個(gè)形狀象方尖塔形,它由兩部分構(gòu)成,即ClipTexture棧和ClipTexture金字塔。凡是比裁剪尺寸大的Mipmap層就被裁剪,其裁剪下來的裁剪區(qū)組成ClipTexture棧,由于裁剪中心是隨視點(diǎn)移動而變化的,由此而生成的裁剪區(qū)也動態(tài)改變,那么ClipTexture棧數(shù)據(jù)也需要動態(tài)切換。ClipTexture金字塔是由Mipmap中小于等于裁剪尺寸的層組成,這些層不用裁剪,它正好是原始的Mipmap金字塔“塔尖”部分,這些層一次能整個(gè)容納在紋理內(nèi)存中,其數(shù)據(jù)是靜態(tài)的,不隨視點(diǎn)移動而變化。    在Clipmap中關(guān)鍵問題在于確立裁剪中心ClipCenter點(diǎn)。在平坦的地形上最簡單的方法就是將觀察點(diǎn)投影到地形上,然后利用紋理坐標(biāo)作為裁剪中心。這個(gè)方法的缺點(diǎn)在于clipmap包含了了觀察點(diǎn)后面的紋理,而且出了觀察視景體之外。如果把裁剪中心從觀察點(diǎn)向前挪一定的距離,那么就需要針對不同的分辨率選擇不同的裁剪中心。   雖然裁剪紋理算法處理大紋理產(chǎn)生了很好的效果,但是,就目前它的實(shí)現(xiàn)基礎(chǔ)來看還有以下限制:(l)它需要大容量的紋理存儲硬件;(2)裁剪紋理的有效實(shí)時(shí)操作需要一些特殊硬件的協(xié)助,如需要自動變換紋理映射的硬件,把紋理坐標(biāo)從原始虛擬空間映射到這個(gè)經(jīng)裁剪的紋理空間叭(3)裁剪紋理依賴于快速的硬盤訪問以取得紋理數(shù)據(jù);(4)目前支持這項(xiàng)技術(shù)的高層系統(tǒng)軟件只有OpenGLPerformer,并且對操作系統(tǒng)要求苛刻,硬件上只有其專用圖形工作站才能支持。所有這些特點(diǎn)對于當(dāng)前低端平臺和低帶寬環(huán)境是一種不足,其實(shí)現(xiàn)成本高、可移植性差限制了它的推廣應(yīng)用。盡管如此,裁剪紋理的實(shí)現(xiàn)思想對于解決圖形學(xué)中相關(guān)問題有非常大的指導(dǎo)意義,這種方法不僅對顯示任意大范圍的紋理是重要的,同時(shí)還能減少幾何建模工作。裁剪紋理采用動態(tài)從大量數(shù)據(jù)上裁剪一小部分用于顯示,使用了一些緩存預(yù)測算法思想提高漫游的實(shí)時(shí)性和運(yùn)用環(huán)形裝載模式進(jìn)行數(shù)據(jù)重用等,這些方法對處理大量幾何數(shù)據(jù)的顯示也很重要,利用裁剪紋理的紋理數(shù)據(jù)顯示算法,整體的數(shù)據(jù)流可以被輕易地以應(yīng)用需要按一定大小裁剪,開發(fā)這種顯示大場景幾何數(shù)據(jù)LOD信息的系統(tǒng)是可能的,同時(shí)從2D紋理擴(kuò)展到3D紋理應(yīng)用也可以借鑒這一做法。

            久久青青国产| 久久久久人妻精品一区| 三上悠亚久久精品| 一级做a爰片久久毛片看看| 91久久成人免费| 91精品无码久久久久久五月天| 久久99精品国产一区二区三区| 国内精品久久久久久99蜜桃 | 99久久婷婷免费国产综合精品| 国产精品久久久久久久久软件 | 亚洲愉拍99热成人精品热久久| 一级做a爰片久久毛片看看| 一本一道久久a久久精品综合| 欧美精品一区二区久久| 亚洲欧美日韩精品久久亚洲区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 色综合久久综精品| 国产巨作麻豆欧美亚洲综合久久 | 亚洲国产精品综合久久网络| 亚洲国产成人久久综合野外| 18禁黄久久久AAA片| 亚洲精品乱码久久久久66| 久久精品国产亚洲AV无码娇色| 国产成人精品白浆久久69| 亚洲国产精久久久久久久| 久久精品亚洲乱码伦伦中文| 久久精品国产2020| 97精品国产91久久久久久| 国产无套内射久久久国产| 超级碰碰碰碰97久久久久| 77777亚洲午夜久久多喷| 久久久久久国产精品免费免费| 亚洲国产精品18久久久久久| 久久99精品久久久久久| 亚洲欧美日韩久久精品| 精品久久久久久亚洲精品| 久久精品亚洲欧美日韩久久| 精品国产乱码久久久久久1区2区 | 久久这里都是精品| MM131亚洲国产美女久久| 无码精品久久一区二区三区|