sldbtree

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

公告牌技术应该在每款游戏应用中都会用到,因为粒子系统大量用到该技术。对粒子系统来说,每个粒子都是一直朝向相机的一个位图。在早期的PC游戏中,树的表现也多用公告牌技术,现在随着硬件发展和玩家(player)胃口的改变,树很少用此技术了。但是,因为很多手持设备上的3D应用越来越多,在这样的设备上,采用对CPU要求比较低的公告牌还是很有吸引力的。


现实应用中,公告牌一般都围绕x轴(Pitch)和y轴(Yaw)转动,不考虑z轴的转动(Roll),因此公告牌技术中有所谓的Cylinder Billboard和Spherical Billboard。现在的MMORPG中,大量运用绕Y轴和X轴旋转的公告牌技术。这里也就重点讲解相关使用方法,分几个步骤:


1、取得每一帧的view matrix;

2、从上面的view matrix得到该矩阵的inverse matrix;

3、逆矩阵中位置的几个量手工设置成 0,也就是去掉view矩阵中的位置信息;

4、把该逆矩阵作为绘制公告牌图元时候的world matrix;

5、绘制公告牌图元,如粒子(particle)。

6、记得需要的话恢复或者设置其他3D物体需要的世界矩阵,用于其他非billboard的渲染。


在代码上,D3D代码大概如此这般:


D3DXMATRIX matrix; 


// Create billboard matrix

D3DXMatrixInverse( &matrix, NULL, &g_ViewMatrix );


matrix._41 0.0f;

matrix._42 0.0f;

matrix._43 0.0f;


// For all the billboard batch, we set their world matrix as this.

// in real application, you should backup previous world matrix first,

// then after billboard rendering, you can set that world matrix back.


device.SetTransform (D3DTS_WORLD, &matrix);


写这篇文章的时候,正好截下“剑侠情缘叁”(西山居出品的网游)的使用公告牌技术的例子。上面的图的"武"和下面的图的"武"是同一个Billboard在不同的相机角度的截图。可以很容易看出来,在第二张图中,我们的相机已经到了人的头顶上,方向是朝下看,这个图元还是对准我们的镜头。这个就是公告牌技术的典型运用。

 

 


附录:

1、Billboard示例代码

http://www.163disk.com/fileview_326071.html

posted on 2011-06-28 15:10  sldbtree  阅读(876)  评论(0)    收藏  举报