2014-03-27 73 views
1

我有插值的基本知識:這是一種方法來估計一個給定位置的值取決於它的周圍。因此,根據給定的位置P,最近鄰居內插選擇網格中最近的鄰居並複製其值(s)。給定兩個網格點之間的P,線性插值是網格點的兩個值的(線性)混合。如果P在半位置上正確,則從第一個值開始0.5,並且第二個值的0.5被加總到結果值。對於二維來說,這稱爲雙線性插值和三維三線插值。什麼是OpenGL中的Mipmapping?

所以我知道Min Mag濾波器是用來爲例如OpenGL紋理。例如。此頁http://gregs-blog.com/2008/01/17/opengl-texture-filter-parameters-explained/下表中給出的:

Filter Combination      | Bilinear | Bilinear | Mipmapping 
(MAG_FILTER/MIN_FILTER)    | (Near) | (FAR) | 
---------------------------------------+----------+----------+------------ 
GL_NEAREST/GL_NEAREST_MIPMAP_NEAREST | Off  | Off  | Standard 
GL_NEAREST/GL_LINEAR_MIPMAP_NEAREST | Off  | On  | Standard 
GL_NEAREST/GL_NEAREST_MIPMAP_LINEAR | Off  | Off  | Trilinear filtering 
GL_NEAREST/GL_LINEAR_MIPMAP_LINEAR | Off  | On  | Trilinear filtering 
GL_NEAREST/GL_NEAREST    | Off  | Off  | None 
GL_NEAREST/GL_LINEAR     | Off  | On  | None 
GL_LINEAR/GL_NEAREST_MIPMAP_NEAREST | On  | Off  | Standard 
GL_LINEAR/GL_LINEAR_MIPMAP_NEAREST | On  | On  | Standard 
GL_LINEAR/GL_NEAREST_MIPMAP_LINEAR | On  | Off  | Trilinear filtering 
GL_LINEAR/GL_LINEAR_MIPMAP_LINEAR | On  | On  | Trilinear filtering 
GL_LINEAR/GL_NEAREST     | On  | Off  | None 
GL_LINEAR/GL_LINEAR     | On  | On  | None 

在同一頁解釋說,MIN濾波器爲對象,比紋理(遠處的物體)和馬格過濾更小,比紋理大對象(近對象)。我雖然給定了3D紋理,但是如果GL_LINEAR被設置爲兩個濾鏡,插值方法應該始終是三線性的。

回答

3

僅當紋理的單個像素分佈在顯示器的多個像素上時,紋理插值才起作用。如果紋理足夠遠以至於顯示像素大於紋理像素,則根本不會顯示某些紋理像素,從而導致鋸齒狀,雜亂的外觀。

這是mipmapping進來的地方:代替紋理的單個版本,您可以使用多個版本,每個版本都小於以前版本,通過縮小紋理並將相鄰像素混合在一起來創建。這被稱爲mipmap,不同的版本傳統上每個都是最後一個尺寸的一半。在顯示紋理時,渲染器將選擇在多個顯示像素之間傳播紋理像素的最大版本,並在其上進行插值。

但是這反過來又有一個問題:紋理版本之間的轉換會在顯示中產生一個突變線。對此的解決方案是三線性過濾:而不是簡單地在紋理中的像素之間插值,渲染器也在紋理的版本之間進行插值。

0

紋理貼圖是紋理的不同版本。例如,遠處的對象在常見的場景中會使用紋理的分辨率較小的版本,這有助於提高性能,甚至可以用增加內存使用量的代價來解決鋸齒僞像。您甚至可以爲採樣器中的mipmap設置插值方法,例如最近鄰元素互換mipmap,但它們之間的線性漸變。