osg::BillBoard是在osg::Geode的基础上,加上了一个旋转功能。使其下面的Drawables能够根据眼睛的位置,进行旋转,让Drawables始终面对眼睛。
使用的话,只需要在原来Drawable和Geode的基础上,修改几行代码就可以了,将Geode改成BillBoard,然后设置BillBoard的旋转模式就可以了。
#include<osgViewer/Viewer>
int main(int argc, char **argv)
{
osgViewer::Viewer viewer;
//创建三角形的顶点数组
osg::Vec3 myCoords[] =
{
osg::Vec3(-10, 0.0, 0.0),
osg::Vec3(10, 0.0f, 0.0),
osg::Vec3(0.0, 0.0f, 10.0)
};
int numCoords = sizeof(myCoords) / sizeof(osg::Vec3);
osg::Vec3Array* vertices = new osg::Vec3Array(numCoords, myCoords);
//创建三角形drawable
osg::Geometry* triangleGeom = new osg::Geometry();
// pass the created vertex array to the points geometry object.
triangleGeom->setVertexArray(vertices);
//使用这些顶点画三角形
triangleGeom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::TRIANGLES, 0, numCoords));
osg::Billboard *billBoard = new osg::Billboard;
billBoard->addDrawable(triangleGeom);
billBoard->setMode(osg::Billboard::POINT_ROT_EYE);
viewer.setSceneData(billBoard);
return viewer.run();
}