凹凸贴图

✍ dations ◷ 2025-01-11 09:00:25 #三维计算机图形学,演示效果,纹理贴图

凹凸贴图(bump mapping),又称为凸凹纹理映射、皱面贴图,是一项计算机图形学技术,在这项技术中每个待渲染的像素在计算照明之前都要加上一个从高度图中找到的扰动。这样得到的结果表面表现更加丰富、细致,更加接近物体在自然界本身的模样。法线贴图是一项常用的凹凸贴图技术,另外还有许多其它的实现技术,如视差映射等等。

BMEM技术通过一张叫做高度图(Height map)的灰度图来储存每一点的高度信息然后直接由API处理。

但事实上游戏编程员却通常并不喜欢使用BMEM技术,因为他执行速度慢,因此他们通常使用DP3技术:直接把高度图(Height map)转换成一张法线图(Normal Map),其图的RGB分别是原高度图该点的法线指向:Nx、Ny、Nz,这张图可由Direct3D的专门函数帮助我们计算。最后在渲染的时候直接将该高度图的每个像素与光源的向量点乘,即可得到表示每一点的明暗系数的图:根据高度图,越突出的地方,法线与光源夹角越小,该点的数值越大。接着将这张图乘到渲染线中即可,这样就使模型在背光的凹处有阴影而在面向光源处更亮的效果,这样的3D模型看起来就像真的凹凸不平一样!这些都可以直接在渲染流水线中由机器完成。

具体可以使用以下简单的语句来实现:

//将光源位置转换成ARGBDWORD Vector2ARGB(D3DXVECTOR3 *v,float height){DWORD r=(DWORD)(127.0f*v->x+128.0f);DWORD g=(DWORD)(127.0f*v->y+128.0f);DWORD b=(DWORD)(127.0f*v->z+128.0f);DWORD a=(DWORD)(255.0f*height);return((a<<24L)+(r<<16L)+(g<<8L)+b);}//生成法线图D3DXComputeNormalMap(pNormalMap,pHeightMap,NULL,0,D3D_CHANNEL_RED,1.0f);//pHeightMap为原高度图的指针,pNormalMap为一张空纹理,用于存放法线图//在渲染程序段中可以这样写:DWORD F=Vector2ARGB(&light,0.0f); //light是单位化的光源向量pD->SetRenderState(D3DRS_TEXTUREFACTOR,F);//pD是D3D的设备指针,这句将光源法线参数输入pD->SetTexture(1,TEXTURE);//设置原纹理,如上面的球,如有需要可以贴上纹理样式pD->SetTexture(0,normalmap);//使用上面生成好的法线图pD->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);//设置“来源1”为法线图pD->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_DOTPRODUCT3);//将“来源1”(法线图)与“来源2”(光源法线)进行点乘pD->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_TFACTOR);//设置“来源2”为光线的光源法线参数pD->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_TEXTURE);//这步和下面几步将图片的原纹理加上pD->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_MODULATE);pD->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_CURRENT);

假凹凸贴图

三维计算机图形程序员有时使用计算量较小的假凹凸贴图模拟凹凸贴图效果。其中一个方法是使用纹素索引变化取代曲面法线变化,这种方法经常用于二维凹凸贴图。在GeForce 2类型的图形加速硬件中就使用了这项技术。

全屏的二维假凹凸贴图,可以很容易地用简单快速的渲染循环实现,在二十世纪九十年代的示范影像是一个非常普通的视觉效果。

位移映射与凹凸贴图之间区别在例图中已经很明显地显现出来了:在凹凸贴图中,只有法线进行了扰动,而几何体本身没有扰动,这样的结果就是人为改变只出现在物体的轮廓上,而球体本身仍然是原来的圆形。即凹凸贴图只是视觉上的改变,就像一个画得很透视的图片;而位移映射却真的将3D物体变得“凹凸不平”。

相关

  • 扁桃酸扁桃酸(化学式:C8H8O3),又名苦杏仁酸、苯乙醇酸,学名α-羟基苯乙酸。白色斜方片状结晶,露置遇光变色分解。易溶于乙醚和异丙醇,溶于水和乙醇。扁桃酸及其衍生物在体内是肾上腺素和
  • 鼠类鼠,又称老鼠或耗子,即鼠总科(Muroidea),是一种属于啮齿类的总科,其中含有仓鼠、沙鼠、大鼠、小鼠,以及其他亲缘动物。它们广泛分布于南极以外的各个大陆。由于难以测定各分类群之间
  • 大气圈大气层,均源自及也许是一层受到重力吸引聚拢在拥有巨大质量天体周围的气体,而如果重力够大且气体的温度够低,就能长期保留住。有些行星拥有许多不同的主要气体,并且有非常深厚的
  • 厌氧鞭菌属厌氧鞭菌属是新美鞭菌门新美鞭菌科真菌的一属。其学名来自古希腊语词根anaero-(厌氧)和mykēs(真菌),指该属和新美鞭菌门其他各属真菌一样,为生活在食草动物消化道内的厌氧性真菌
  • 裸蕨属见内文裸蕨(学名:)是一属已灭绝的陆生维管植物,是泥盆纪时期被发现的第一批化石植物之一,它们的构造比其他一些与其生存于相同年代的植物(如莱尼蕨)复杂得多,并被认为是蕨类植物演化
  • 臼井佐知子臼井佐知子(1949年4月-)是一名日本历史学家,专门研究明清社会史、徽州商人。
  • 森崎和幸森崎和幸(1981年5月9日-),已退役日本职业足球员,司职中场。森崎和幸在1997年加入了广岛三箭青训,此后他在1999年被提拔到了一线队,在1999年11月20日客场对大阪飞脚首次在日职出场。
  • 上埃格施陶湖坐标:48°16′10″N 10°19′0″E / 48.26944°N 10.31667°E / 48.26944; 10.31667上埃格施陶湖(德语:Oberegger Stausee),是德国的湖泊,位于该国东南部,由巴伐利亚州负责管辖,处于
  • 恰尔拉凯雷恰尔拉凯雷(Challakere),是印度卡纳塔克邦Chitradurga县的一个城镇。总人口49065(2001年)。该地2001年总人口49065人,其中男性25163人,女性23902人;0—6岁人口5822人,其中男2954人,女2
  • 五色 (佛教)佛教里的五色,经上说是释迦牟尼佛方成佛时从身上发出的六种颜色(第六种为前五种的混合),代表了如来的德行与智慧。这五色也被佛教采用为象征(英语:Buddhist symbolism),例如佛教旗。