跳至內容

材質貼圖

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

這是本頁的一個歷史版本,由Addbot對話 | 貢獻2013年3月9日 (六) 11:28 (机器人:移除20个跨语言链接,现在由维基数据d:q752176提供。)編輯。這可能和目前版本存在着巨大的差異。

材質貼圖,又稱紋理貼圖,在電腦圖學中是把儲存在主記憶體里的點陣圖包裹到3D渲染物體的表面。紋理貼圖給物體提供了豐富的細節,用簡單的方式模擬出了複雜的外觀。一個圖像(紋理)被貼(對映)到場景中的一個簡單形體上,就像印花貼到一個平面上一樣。這大大減少了在場景中製作形體和紋理的計算量。例如,可以建立一個球並把臉的紋理貼上去,這樣就不用處理鼻子和眼睛的形狀了。

隨着圖形卡功能越來越強,理論上材質貼圖變得越來越不必要,而三維繪製(渲染)成了常用的工具。但事實上,最近的趨勢是使用更大和更多的紋理圖像,再加上把多幅紋理組合到同個物體的不同角度的複雜技術。(這在即時圖學中更為重要,因為同時顯示的紋理個數是可用圖形主記憶體容量的函數。)

最後顯示在螢幕上的像素是從紋理的紋素中計算的,計算方法由紋理濾波決定。最簡單的方法是每個像素使用一個最接近的紋素,多個紋素之間的線性插值也很常用,還有更複雜的辦法,參看Mipmap。另外,紋理也可用來決定模型表面的顏色,甚至雙向反射分佈函數(BRDF),從而和光照模型等方法結合起來。

例子代碼

下面是簡單的球面材質貼圖的Java語言實現。

   public double[] sphereMap(double x, double y, double z, int radius)
   {
       /* x,y,z 是球面的法向量乘以它的半径*/
       /* 也就是 vec3 (intersect_pointv3-sphere_centre_pointv3)                */
       double u, v;
       v = Math.acos(z/radius) / PI;
       if (y > 0.0) {
           u = Math.acos(x/(radius * Math.sin(PI * v))) / PI*2;
       }
       else {
           u = (PI + Math.acos(x/(radius * Math.sin(PI * v)))) / PI*2;
       }
       
       return new double[] { u, v };
   }

參看

外部連結