公告牌技术,即billboard技术,在3D游戏中有着广泛的应用.它的本质就是用预先做好的几幅
位图来代替3D物体,极大地节省资源和提高速度.仔细观察<<魔法门>>系列游戏,它的精灵,树木,物
品都是二维图象,但由于它始终朝向观察者,你根本看不到它"扁"的一面,所以给人一种立体的感觉.
这种技术最大的优点是快.试想一个多边形构成的3D精灵,至少百余个多边形,而用billboard技术,
只需处理两个多边形,优势不言而喻.其他3D游戏的爆炸效果,<<极品飞车>>中路旁的树木,都使用了
该技术.
使用方法:
- 创建公告牌 osg::Billboard* center = new osg::Billboard();
- 设置旋转模式,可选如下
POINT_ROT_EYE :始终朝向眼睛 POINT_ROT_WORLD : AXIAL_ROT:绕坐标轴 center->setMode(osg::Billboard::POINT_ROT_WORLD);
如果是坐标轴
x_arrow->setMode(osg::Billboard::AXIAL_ROT);
//以x轴为旋转轴
x_arrow->setAxis(osg::Vec3(1.0f,0.0f,0.0f));
在本例中createSquare创建了一个贴纹理的正方形。
关于纹理以后会进行研究。
createAxis函数创建了一个坐标轴,像Texture2D、LineWidth都是状态属性,对应于OpenGL的状态集,
应该去设置StateSet。
Billboard继承Geode,可以添加drawable,因此,像DrawPixels、Geometry、ShapeDrawable、TextBase
等都可以添加其中。
Billboard中也有
enum Mode {
POINT_ROT_EYE,
POINT_ROT_WORLD,
AXIAL_ROT
};这三种模式,用于设置节点朝向。
这里不得不比较一下AutoTransform和Billboard的区别:
BillBoard继承Geode,因此它可以实现一些轻量级的朝向屏幕,例如树可以通过这种方式实现。
AutoTransform继承Group,实现的功能比Billboard要多,更灵活,可以根据视点到节点的距离自动进行
节点缩放。
因此说AutoTransform是Billboard更为灵活的一种替代物。
因为osgText::Text也同样有朝向屏幕的功能,因此不建议text和Billboard和AutoTransform一起使用。
下面是从网上找的的关于Billboard和AutoTransform的说明:
osg::AutoTransform is an alternative to osg::Billboard.
AutoTransform是Billboard的另外一种选择。
AutoTransform is a derived form of Transform that automatically scales or rotates to keep
its children aligned with screen coordinates.
AutoTransform继承Transform,通过自动缩放和旋转来保持子节点对齐屏幕坐标。
Billboard is a derived form of Geode that orients its osg::Drawable children to face the
eye point.
Billboard继承Geode,能够自动使Drawable对着视点。