麒麟子

~~

导航

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(12)

随笔分类

随笔档案

Friends

WebSites

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜

公告板

开始只是知道公告板就是不管摄相机怎么转,对象总是在摄相机前面。这是公告板中的一种,也是最常见的一种
如游戏中人物、NPC的名字等,就是用贴图技术,然后再用公告板,这样不管玩家怎么转动视角,总是能看见名字正对着自己,
终于自己实现了一回公告板函数

void Billboard(IDirect3DDevice9* Device,D3DXMATRIX &matInput,D3DXMATRIX &matOutput)
{
   //=========================
   //公告板技术
   //==========================
   D3DXMATRIX matBillboard,matView;
   D3DXMatrixIdentity(&matBillboard);//初始化为单位矩阵
   Device->GetTransform(D3DTS_VIEW,&matView);//取得观察矩阵
   matBillboard._11 = matView._11;//赋值
   matBillboard._13 = matView._13;
   matBillboard._31 = matView._31;
   matBillboard._33 = matView._33;

   D3DXMatrixInverse(&matBillboard,NULL,&matBillboard);//求其逆矩阵
   matOutput = matBillboard * matInput;
   //公告板结束
}

函数说明:
返回值:void
Device 是一个IDirect3DDevice9* 类型的参数
&matInput 是一个D3DXMATRIX 类型的参数
&matOutput 是一个D3DXMATRIX 类型的参数

功能,将传入的matInput 矩阵,与摄相机矩阵的Look方向矩阵相乘,得到matOutput

用法
D3DXMATRIX matWorld;
D3DXMatrixIdentity(&matWorld);

D3DXMatrixTranslation(&matWorld,1,1,1); //对matWorld 进行必要的变换 如translation ,rotation 之类的。

Billboard(g_pDevice,matWorld,matWorld);

g_pDevice->SetTransform(D3DTS_WORLD,&matWorld);

接下来就可以进行材料,纹理设置、绘制等工作了!   
虽然是很简单的技术,但却很实用。

    

posted on 2009-04-18 09:59 麒麟子 阅读(510) 评论(1)  编辑 收藏 引用 所属分类: DirectX

评论

# re: 公告板[未登录] 2009-04-18 10:53 叶子

看都看不懂的!  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理