凹凸贴图

✍ dations ◷ 2025-10-23 05:40:27 #三维计算机图形学,演示效果,纹理贴图

凹凸贴图(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物体变得“凹凸不平”。

相关

  • 技术路线技术路线(technology roadmap)是使用特定技术方案帮助达到短期或者长期目标的计划,用于新产品、项目或技术领域的开发,并协助公司在动荡局势中生存下来。
  • 轴烯-轴烯是一类碳氢化合物,由单环n-烷烃上每个碳原子上的两个氢被一个=CH2替换而成。-轴烯含有n个以中心碳环为轴心延伸出去的碳-碳双键,故称轴烯。和轴烯分子被认为具有平面结构
  • 九方姓《百家姓》中无此姓九方姓为汉字复姓,源于嬴姓,据《通志》、《淮南子·道应训》、《列子·说符》、《老子·杂篇》、《吕览观表》中皆有记载,春秋时期秦国有一善于相马的名人,人
  • 湘桂走廊湘桂走廊是位于湖南省与广西壮族自治区之间的狭长平原。湘桂走廊被夹在南岭的越城岭与海洋山之间,自古就是中原通向岭南的交通要道。从前湘桂走廊重要交通是河运,有灵渠连通湘
  • 哥德马尔森号商船哥德马尔森号商船(英语:Geldermalsen)是一艘荷兰东印度公司的商船,它最后一次航行时载着茶叶、瓷器和黄金,从中国广州驶往荷兰首都阿姆斯特丹。这艘船在航行了16天后,于1752年1月3
  • 军人身份确认牌军人身份确认牌(亦称兵籍牌、军籍牌、兵籍名牌、金属身份识别证),又俗称“狗牌”(Dog tag),始于美国南北战争时期,是为了便于对战场上的伤亡士兵进行身份鉴别,以及了解诸如血型、预
  • 厉无畏厉无畏(1942年11月-),男,浙江东阳人,中华人民共和国政治人物,曾任上海社会科学院部门经济研究所所长,中国国民党革命委员会中央委员会常务副主席,第十一届全国政协副主席。2008年,当选
  • 佩尔沃代尔瓦山坐标:44°33′26″N 7°1′24″E / 44.55722°N 7.02333°E / 44.55722; 7.02333佩尔沃代尔瓦山(意大利语:Pelvo d'Elva),是意大利的山峰,位于该国西北部,由皮埃蒙特大区负责管辖,属
  • 朱利斯·克拉普罗特朱利斯·克拉普罗特或柯恒儒(德语:Julius Heinrich Klaproth,1783年10月11日-1835年8月27日)法国德意志人语言学家、历史学家、东方学家、民族学家、探险家,与法国汉学家雷暮沙一
  • 科米塔斯科米塔斯(亚美尼亚语:Կոմիտաս;1869年9月26日-1935年10月22日),本名索格霍蒙·索格霍莫尼扬,是一名亚美尼亚使徒教会的神父、音乐家、作曲家、编曲、歌手和唱诗班指挥,亦被广