osg布告板技术(Billboard)

来源:互联网 发布:17%退税率出口退税算法 编辑:程序博客网 时间:2024/06/10 13:12

 公告牌技术,即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对着视点。


0 0
原创粉丝点击