高級紋理映射技術(shù)(11) 摘要:
要渲染看起來真實的場景,最好是使用高分辨率而且顏色豐富的紋理,但這樣的紋理可能會耗費大量的內(nèi)存,例如,一張每像素16位顏色的256 x
256紋理將使用128KB的內(nèi)存。如果在該紋理中使用多級漸進紋理,還需要額外的43KB內(nèi)存。一個使用50張這種紋理的場景將需要8MB的內(nèi)存,如果需要更強的真實性,可以使用每像素32位顏色的512
x 512紋理,但那就需要8倍的內(nèi)存。
為了減少紋理消耗的系統(tǒng)帶寬和內(nèi)存空間,Direct3D支持紋理壓縮和實時解壓,即DXT紋理壓縮。壓縮后的紋理被存儲在Direct3D紋理指針中,當Direct3D渲染物體時,Direct3D引擎自動對紋理進行解壓。應(yīng)用DXT壓縮紋理不僅可以節(jié)省內(nèi)存空間,而且能有效地降低紋理傳輸帶寬,提高圖形系統(tǒng)的整體性能。
高級紋理映射技術(shù)(10) 摘要: 立體紋理(volume
texture)是一組應(yīng)用到二維圖元(如一個三角形或一條直線)的三維紋理元素的集合,可以使用立體紋理實現(xiàn)一些特殊效果,如迷霧、爆炸等。當對一個圖元使用立體紋理時,它的每個頂點都需要一組三元紋理坐標。當繪制該圖元時,它中間的每個像素都將用立體紋理中的一些紋理元素的顏色值進行填充,這與二維紋理映射的情況相似。
立體紋理以薄片為單元組織起來,可以把它想象成將(寬 x 高)的二維表面轉(zhuǎn)換成(寬 x 高 x
深)的三維立體,每個薄片是單獨的一行,立體紋理可以有一系列級別,每一級都較上一級縮小一倍。
高級紋理映射技術(shù)(9) 摘要:
凹凸紋理映射是一種紋理混合方法,它可以創(chuàng)建三維物體復雜的紋理外觀表面。普通的紋理映射只能模擬比較平滑的三維物體表面,難以顯示表面高低起伏、凹凸不平的效果。凹凸紋理映射能夠通過一張表示物體表面凹凸程度的高度圖(稱為凹凸紋理),對另一張表示物體表面環(huán)境映射的紋理圖的紋理坐標進行相應(yīng)的干擾,經(jīng)過干擾的紋理坐標將應(yīng)用于環(huán)境映射,從而產(chǎn)生凹凸不平的顯示效果。凹凸紋理映射通常由三張紋理映射圖組成,第一張紋理圖表示物體表面原始紋理顏色,第二張凹凸紋理圖表示物體表面凹凸的高度起伏值,用來對下一張環(huán)境紋理圖坐標進行干擾,第三張紋理圖表示周圍鏡面反射或漫反射光照的環(huán)境光照映射圖。
高級紋理映射技術(shù)(8) 摘要:
三維場景中的物體不僅受光照影響,而且受周圍環(huán)境的影響,可以映射出周圍環(huán)境的圖像,環(huán)境映射就是模擬物體光滑表面映射周圍環(huán)境的一種技術(shù)。實際上,就是將一幅包含物體周圍環(huán)境場景的紋理貼到物體表面上,這樣就可以在一定程度上模擬出物體對周圍環(huán)境的映射,而無須使用像光線跟蹤算法這種復雜的計算技術(shù)。
高級紋理映射技術(shù)(7) 摘要:
Direct3D提供了對生成的紋理坐標進行坐標變換的功能,與頂點坐標變換相類似,可以指定一個4x4的紋理坐標變換矩陣,把它與生成的紋理坐標相乘,然后將變換之后的紋理坐標輸出至Direct3D渲染流水線。使用紋理坐標變換可以對紋理坐標進行諸如平移、旋轉(zhuǎn)和縮放等三維變換。紋理坐標變換對于生成一些特殊效果是非常有用的,它不用直接修改頂點的紋理坐標。例如可以通過一個簡單的平移矩陣對紋理坐標進行變換,從而使物體表面上的紋理不斷變換位置,產(chǎn)生動畫效果。紋理坐標自動生成在三維圖形程序中最廣泛的應(yīng)用是環(huán)境映射。
高級紋理映射技術(shù)(6) 摘要:
在Direct3D程序中,不僅可以在模型載入階段或渲染階段指定物體的紋理坐標,還可以通過Direct3D渲染引擎自動生成紋理坐標,用于諸如環(huán)境映射等特殊的視覺效果。與手動設(shè)置紋理坐標相比,紋理坐標自動生成在Direct3D坐標變換和光照流水線中完成,執(zhí)行速度更快。
Direct3D系統(tǒng)可以使用經(jīng)過變換的攝像機空間頂點位置坐標、法線信息來生成紋理坐標。如果使用紋理坐標自動生成,那么在頂點中就可以不用包含紋理坐標數(shù)據(jù),從而可以降低圖形渲染時的數(shù)據(jù)傳輸量。紋理坐標自動生成主要用于產(chǎn)生一些特殊效果,在大多數(shù)情況下還是手工為每個頂點指定紋理坐標。
高級紋理映射技術(shù)(5) 摘要:
Direct3D在渲染一個場景時,它可以結(jié)合幾種來源的顏色信息:頂點、當前材質(zhì)、紋理貼圖、先前寫入渲染目標的顏色信息,然后將其中的一些顏色混合起來。同時也可以使用Alpha來指定Direct3D該以怎樣的權(quán)重混合這些顏色,Alpha信息可以存儲在頂點中、材質(zhì)中、紋理貼圖中。Alpha值為
0表示完全透明,Alpha值為1表示不透明,其余0~1之間的值表示不同程度的透明。
高級紋理映射技術(shù)(4) 摘要: 發(fā)光映射(glowing
mapping)與黑暗映射正好相反,它對于模擬那些具有獨立于基礎(chǔ)貼圖的發(fā)光部分的物體很有用,比如模擬發(fā)光二極管、按鈕、建筑物內(nèi)的燈光、太空船上的燈光等。發(fā)光映射應(yīng)僅影響基礎(chǔ)貼圖上的發(fā)光區(qū)域,而不影響其他部分。因此需要對發(fā)光效果做加法,而不是做乘法。
如果要模擬一塊粗糙的石灰泥墻壁,可以通過細節(jié)映射(detail
mapping)來實現(xiàn)。實現(xiàn)過程是:將基礎(chǔ)貼圖(也就是第一張紋理)的顏色未經(jīng)修改便作為第二個紋理操作階段中的第二個參數(shù),然后通過
D3DTOP_ADDSIGNED將灰色的細節(jié)紋理與基礎(chǔ)貼圖相加。這個操作本質(zhì)上是做了一個加法,只是使用了有符號的顏色值來代替平時使用的無符號值。在對兩張紋理的像素顏色進行D3DTOP_ADDSIGNED操作時,它將參數(shù)的每個成分相加后再減去偏移量0.5,從而使有效值域變?yōu)?0.5
~ 0.5。對一些比較舊的顯卡,當其不能支持D3DTOP_ADDSIGNED操作時,可以使用D3DTOP_MODULATE2X代替
D3DTOP_ADDSIGNED操作進行模擬。
高級紋理映射技術(shù)(3) 摘要: 可以通過黑暗貼圖三種調(diào)制操作的切換來創(chuàng)建一個動畫示例。
當很強的陽光照射在物體表面上時,會使它表面的顏色變得更加明亮,這可以通過將紋理與頂點的漫反射顏色相混合來模擬這種效果。當一個白色材質(zhì)反射一個方向光時,反射量越多,就意味著紋理顏色在最終顯示結(jié)果中所占的成分越少。因此,那些被光直接照射到表面會呈現(xiàn)出白色。
試想,當你站在一間伸手不見五指的房間內(nèi),無法看清周圍的任何顏色。于是你打開燈光,突然之間物體的顏色便呈現(xiàn)了出來,就好像是被火焰點燃了一樣。對于這種效果,可以通過黑暗貼圖和頂點漫反射顏色的混合來模擬。
高級紋理映射技術(shù)(2) 摘要:
紋理映射本質(zhì)上就是從紋理中獲取顏色值,然后應(yīng)用到物體的表面,多層紋理映射本質(zhì)上就是混合多層紋理的顏色,然后應(yīng)用到物體表面。為了處理上的方便,
Direct3D將顏色的RGB通道和alpha通道分別進行處理,具體的操作方法通過紋理階段狀態(tài)進行設(shè)置。
設(shè)置紋理顏色混合操作的代碼大致如下:
// i表示紋理階段序號
pd3dDevice->SetTextureStageState(i, D3DTSS_COLORARG1, arg1);
pd3dDevice->SetTextureStageState(i, D3DTSS_COLORARG2, arg2);
pd3dDevice->SetTextureStageState(i, D3DTSS_COLOROP, op);
高級紋理映射技術(shù)(1) 摘要:
紋理映射在三維圖形程序設(shè)計中具有非常重要的作用,三維場景中的許多特殊效果都是通過紋理映射來實現(xiàn)的。例如通過紋理映射模擬復雜的光照效果,物體表面對周圍環(huán)境的反射效果等。
Direct3D最多支持8層紋理,也就是說,在一個三維物體的表面可以同時擁有1~8張不同的紋理貼圖。Direct3D能夠在一個渲染過程中把這些紋理顏色依次混合,渲染到同一個物體的表面。每一個紋理層對應(yīng)0~7的索引序號,多層紋理映射能夠模擬更為真實的三維世界。