楼主既然知道怎么绘制包围盒边框,那绘制包围球不也类似吗。先得到节点的包围球,再得到包围球的中心坐标和半径,再根据取得的中心坐标和半径调用shapeBall函数画出包围球不就行了吗?
但是有个问题包围球怎么会有线框呢?你要的是一个透明的包围球吧
代码如下:
osg::ref_ptr<osg::Geode> createBoudingShpere(osg::Node node)
{
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
const osg::BoundingSphere bs = node->getBound();
float radius =bsradius();
osg::ref_ptr<osg::TessellationHints> hints = new osg::TessellationHints;
hints->setDetailRatio(05f);
osg::Vec3 v = bs_center;
osg::ShapeDrawable shapeBall=new osg::ShapeDrawable(new osg::Sphere(v,radius),hintsget());
shapeBall->setColor(osg::Vec4(10f,10f,05f,03f));
geode->addDrawable(shapeBall);
osg::ref_ptr<osg::StateSet> stateset = geode->getOrCreateStateSet();
stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
stateset->setMode(GL_BLEND, osg::StateAttribute::ON | osg::StateAttribute::PROTECTED);
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
return geoderelease();
}
给MatrixTransform设置矩阵的方法
osg::MatrixTransform rootnode = new osg::MatrixTransform;
rootnode->setMatrix(osg::Matrix::rotate(osg::inDegrees(300f),10f,00f,00f));
对于上述代码,osg::Matrix::rotate实际上相当于:
inline Matrixd Matrixd::rotate(value_type angle, const Vec3f& axis )
{
Matrixd m;
mmakeRotate(angle,axis);
return m;
}
以上就是关于怎样绘制osg包围球框(就像包围盒框那样),急急急急全部的内容,包括:怎样绘制osg包围球框(就像包围盒框那样),急急急急、如何operator获取osg:matrixd中的每一行每一列元素、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)