材质贴图

材质贴图,又称纹理贴图,在计算机图形学中是把存储在内存里的位图包裹到3D渲染物体的表面。纹理贴图给物体提供了丰富的细节,用简单的方式模拟出了复杂的外观。一个图像(纹理)被贴(映射)到场景中的一个简单形体上,就像印花贴到一个平面上一样。这大大减少了在场景中制作形体和纹理的计算量。例如,可以建立一个球并把脸的纹理贴上去,这样就不用处理鼻子和眼睛的形状了。

材质贴图
1 = 未加纹理贴图的3D模型
2 = 加了纹理贴图的3D模型
材质贴图
多种图案的例子(点击图片放大);
1: 未加纹理贴图的球体, 2: 纹理贴图加凹凸贴图, 3: 仅凹凸贴图, 4: 透明图加纹理贴图

随着图形卡功能越来越强,理论上材质贴图变得越来越不必要,而三维绘制(渲染)成了常用的工具。但事实上,最近的趋势是使用更大和更多的纹理图像以及使用把多幅纹理组合到同个物体的不同角度的复杂技术。(这在实时图形学中更为重要,因为同时显示的纹理个数是由图形卡的可用图形内存容量决定的。)

最后显示在屏幕上的像素是从纹理的纹素中计算的,计算方法由纹理滤波决定。最简单的方法是每个像素使用一个最接近的纹素,多个纹素之间的线性插值也很常用,还有更复杂的办法,参看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 };    } 

参看

外部链接

Tags:

位图计算机图形学

🔥 Trending searches on Wiki 中文:

第二次世界大战水豚池昌旭鞠婧禕黑執事马云胰臟癌四通桥事件胡锦涛二十大离场事件周润发鐵拳英雄中国抗日战争赵紫阳加利福尼亚州Aespa香港電影金像獎最佳男主角特斯拉 (公司)吳桀睿金庸戰隊大失格轉生貴族憑鑑定技能扭轉人生~繼承弱小領土後,招募優秀人才打造最強領土~欧洲联盟低谷医生鹽水大飯店我獨自升級異塵餘生系列周星馳沈建宏孟加拉国關於我和鬼變成家人的那件事逆天奇案Stray Kids陳蕾死期將至世越号沉没事故六四事件陳俊甫2024年歐洲足球錦標賽沙特阿拉伯李强 (1959年)三上悠亞吹響吧!上低音號安俞真KISS OF LIFE (組合)黃子華曹薇娟土耳其第一次世界大战傑基·羅賓森DAY6Moving劉彥澧世界各国和地区面积列表格鲁吉亚苦力 (電視劇)热辣滚烫吳鎮宇国务资政孟建柱丹妮婊姐TWICE注意力不足過動症狼與辛香料李嘉誠龜梨和也全身性紅斑狼瘡王志安 (记者)The GazettE咒術迴戰角色列表劇場版 排球少年!! 垃圾場的決戰香港電影金像獎最佳女主角秘密的女人歡迎來到實力至上主義的教室加權股價指數硃砂無綫財經 體育 資訊台周子瑜国旗事件🡆 More