凹凸 贴图
具体 实现
[编辑]BMEM技 术
[编辑]BMEM
法 线贴图法
[编辑]//将 光源 位置 转换成 ARGB
DWORD 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);
假 凹凸 贴图
[编辑]三维计算机图形
与 位 移 映 射 之 间的差 别
[编辑]参 见
[编辑]参考 资料
[编辑]- ^ Technologies, Unity. Unity - Manual: Heightmap. docs.unity3d.com. [2017-09-25]. (
原始 内容 存 档于2017-09-26) (英 语).
参考 文献
[编辑]- Blinn, James F. "皱纹
表面 模 拟", Computer Graphics, Vol. 12 (3), pp. 286-292 SIGGRAPH-ACM (August 1978)
外部 链接
[编辑]- http://www.blacksmith-studios.dk/projects/downloads/bumpmapping_using_cg.php(页面
存 档备份,存 于互联网档案 馆) Bump Mapping tutorial using CG and C++