紋理的更多設(shè)置
紋理過(guò)濾
當(dāng)紋理被映射到過(guò)大過(guò)較小的表面時(shí),可能會(huì)出現(xiàn)一些問(wèn)題,例如鋸齒狀邊緣、馬賽克效應(yīng)或者模糊。紋理過(guò)濾就是用來(lái)解決這些問(wèn)題的。紋理過(guò)濾的目標(biāo)是在紋理被映射到不同大小的表面時(shí),保持圖像的質(zhì)量和細(xì)節(jié)。
最常見(jiàn)的紋理過(guò)濾技術(shù)包括鄰近采樣(Nearest Neighbor Filtering)和線性過(guò)濾(Linear Filtering)。
鄰近采樣是OpenGL默認(rèn)的紋理過(guò)濾方式——GL_NEAREST。在這種方式下,OpenGL會(huì)選擇中心點(diǎn)最接近紋理坐標(biāo)的那個(gè)像素。
線性過(guò)濾——GL_LINEAR,它會(huì)基于紋理坐標(biāo)附近的紋理像素,計(jì)算出一個(gè)插值,近似出這些紋理像素之間的顏色。一個(gè)紋理像素的中心距離紋理坐標(biāo)越近,那么這個(gè)紋理像素的顏色在最終顏色中的所占的權(quán)重越大。
在進(jìn)行放大(Magnify)和縮小(Minify)操作的時(shí)候可以設(shè)置紋理過(guò)濾的選項(xiàng),比如在紋理被縮小的時(shí)候使用鄰近采樣,被放大時(shí)使用線性過(guò)濾。和設(shè)置紋理環(huán)繞方式一樣,我們調(diào)用函數(shù)glTexParameteri()設(shè)置紋理過(guò)濾方式。

多級(jí)漸遠(yuǎn)紋理
紋理被應(yīng)用到遠(yuǎn)處的物體上時(shí),由于透視效果,遠(yuǎn)處的像素變得很小,導(dǎo)致圖像細(xì)節(jié)丟失,甚至出現(xiàn)鋸齒狀邊緣。多級(jí)漸遠(yuǎn)紋理(Mipmap)就是用來(lái)解決這個(gè)問(wèn)題的。它簡(jiǎn)單來(lái)說(shuō)就是一系列的紋理圖像,后一個(gè)紋理圖像是前一個(gè)的二分之一。當(dāng)渲染遠(yuǎn)處的物體時(shí),多級(jí)漸遠(yuǎn)紋理技術(shù)可以根據(jù)物體與相機(jī)之間的距離選擇適當(dāng)?shù)膍ipmap級(jí)別,以保證圖像不失真,同時(shí)提高渲染性能,因?yàn)檩^遠(yuǎn)的物體可以使用較低分辨率的紋理,減少了處理和存儲(chǔ)的工作量。
函數(shù)glGenerateMipmap()會(huì)為當(dāng)前綁定的紋理自動(dòng)生成所有需要的多級(jí)漸遠(yuǎn)紋理。
此外,為了指定不同多級(jí)漸遠(yuǎn)紋理級(jí)別之間的過(guò)濾方式,可以使用mipmap模式代替原有的紋理過(guò)濾方式,例如:

一般將縮小過(guò)濾的選項(xiàng)設(shè)置為多級(jí)漸遠(yuǎn)紋理過(guò)濾。因?yàn)槎嗉?jí)漸遠(yuǎn)紋理主要是使用在紋理被縮小的情況下的,紋理放大不使用多級(jí)漸遠(yuǎn)紋理。