Wayne的博客

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

公告板技术原理

  公告板(Billboarding)技术是一项非常实用的技术,它可以用一种简单的方式来完成很多特别的效果。例如纹理的Alpha混合与动画 在一起使用,可以实现很多没有固定表面的效果,如烟雾、火焰、爆炸、能量盾、云彩等。在一定程度上来说,这些效果也可以由其他更真实的技术来实现,但公告 板技术最吸引人的地方在于实现这些效果时所使用的系统资源极低。

  在图6-9所示的《魔兽世界》中,无论玩家如何旋转观察角度,玩家头上显示出来的名字等文字信息始终都是面对玩家的,这里就使用了公告板技术。 在这里可能大家会想到在前面的章节里提过,在D3D中如何实现 2D文字,那么《魔兽世界》中会不会使用的是这种技术呢?答案是否定的,原因在于如果单纯地显示2D文字,其字体的大小变化会是固定的(因为在合理的范围 内字号是有限的几种),而不是渐变的。 软件开发网


图6-9 游戏中使用的公告板技术

  公告板技术的原理其实很简单,就是使用两个三角形组成的矩形来显示一个位图,在显示过程中这个矩形面板根据摄像机的观察角度和位置而变化。这里 看起来又和前面章节中讲到的在3D中显示2D图形有些像,但它们是不同的。当采用正交投影时,显示出来的图形将不具有纵深感,不会随着距离的远近而产生缩 放。而在3D环境中一般的面板又不能很好地显示出效果,如图6 -10所示。


图6-10 没有采用公告板技术的2D面板

  一般来说,公告板技术可以分成3类,分别应用于不同的游戏类型需求:

  (1)观察者可以在游戏虚拟空间中任意移动,而程序员的工作是让某一模型始终对着摄像机。例如,一个太阳。这一类在当前技术中使用较少,因为目前硬件的能力突飞猛进,直接放一个3D模型的太阳就行了。

  (2)在角色扮演游戏中,摄像机可以做的旋转只限于水平和竖直。程序员的目的是:无论角色如何走动,某一个平面模型始终朝向观察点。简单来说,就是平面模型的平面和视线垂直。

(3)第三类和第二类相似,差异在于平面模型不是全部朝向观察点,而是全部朝向投影空间的前屏幕。简单来说,就是平面模型始终与屏幕平行。

  后两类的区别如图6-11所示。


(a)平行于屏幕 (b)垂直于视线
图6-11 后两类公告板的区别

  公告板的程序实现

  在明白了公告板的原理后,就可以着手来实现它了。

  (1)创建平面和普通的平面一样,由两个三角形构成就可以,然后设置对应的U,V坐标。这些平面可以放在任何想放置的位置。但要保证其先垂直于 地平面(由X,Z轴构成的平面),并平行于由X,Y轴构成的平面,也就是说如果摄像机没有变换,就看向Z轴的正方向的话,这个平面已经就是公告板的效果 了。

  (2)因为在游戏中摄像机始终看向Z轴的正方向是不现实的,它总会有一些变换,所以要得到摄像机矩阵的绕Y轴旋转部分:

  (3)绕Y轴旋转部分本身就是一个变换矩阵,而要想达成公告板效果,需要得到这个矩阵的逆矩阵,并把这个逆矩阵设为世界变换矩阵。可以这样理解 就是在变换过程中世界变换和摄像机变换是同时发生作用的,所以它们在显卡底层就是一个矩阵相乘的过程,而摄像机的变换矩阵乘以它的绕Y轴旋转的逆矩阵,就 会把摄像机绕Y轴的旋转效果抵消掉。那么这时候的面板看起来就是公告板的效果了,如图6-12所示。

  D3DXMatrixInverse(&matBillboard, NULL, &matBillboard);
  g_pd3dDevice->SetTransform(D3DTS_WORLD,&matBillboard);


图6-12 公告板的效果



posted on 2011-11-15 10:11  Wayne Cheng  阅读(913)  评论(0编辑  收藏  举报