欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

osg布告板技术(Billboard)

发布时间:2024/8/23 编程问答 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 osg布告板技术(Billboard) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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


总结

以上是生活随笔为你收集整理的osg布告板技术(Billboard)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。