参考教程
《计算机游戏程序设计》
学习记录
这篇文章中,我们简单的介绍下 BillBoard 快速绘制技术。
BillBoard 是一种常见的绘制技术,它允许我们使用较小的资源完成对 3D 物体的绘制,在《计算机游戏程序设计》中对 BillBoarding 技术的具体描述如下:
“ BillBoard技术采用一个带有纹理的四边形,其纹理图像为该BillBoard所代表的物体的图像,即用带有该物体图像的长方形,代替生成该物体的图形画面。BillBoard放置于所代表物体的位置中心,并随相机的运动而变化,始终面对用户。将BillBoard技术与Alpha纹理和动画技术相结合,可以模拟很多自然现象,如树、烟、火、爆炸、云等。”——《计算机游戏程序设计》
如书中所述,BillBoard技术并不复杂。其核心内容在于无论何时二维图像都面向于观察者,我们可以用它来绘制树,火等等效果。
这篇文章的实现代码我们使用最简单的一个二维贴图,同时为了观察二维贴图方向的改变,我们使用带网格的地面作为参考。
首先我们渲染出我们所需要的地面和贴图正方形:
此时,我们处于这个 Square 的正前方,在我们看来它貌似可以当作一个正方体(因为后边我们是看不到的),如果我们移动摄像机位置,然后从另一个方向看它,就会变成这样:
由于角度问题,我们已经可以很清楚的看出来这是一个二维图像,然而这显示不是我们想要的。如果我们需要使用二维图像来模拟三维物体的话,我们有一种办法是在同一处使用不同角度多渲染几张,这样不管我们从哪个角度来看都能看到物体。例如游戏中的草堆:
截图来自游戏《天涯明月刀》
判断是否是这样渲染的方法是拉近之后旋转视角,你会清晰的看到二维图像在不同角度下的形态,当与二维图像一个平面时图像会消失。
另一种便是这篇文章的主题,BillBoard 绘制技术,它将一张二维图像根据我们摄像机的位置变换而旋转方向,保证永远面向着摄像机,这样不管在哪个角度看来都像是三维模型,我们修改图片面向后再看,如下:
摄像机依旧在 Square 正前方
它的计算也比较简单,我们直接在渲染前根据物体的位置和摄像机的位置,计算出角度,然后再对物体绕 Y 轴旋转,在 GraphicsClass::Render()
里直接实现:
1 | bool GraphicsClass::Render() |