怎样绘制osg包围球框(就像包围盒框那样),急急急急

怎样绘制osg包围球框(就像包围盒框那样),急急急急,第1张

楼主既然知道怎么绘制包围盒边框,那绘制包围球不也类似吗。先得到节点的包围球,再得到包围球的中心坐标和半径,再根据取得的中心坐标和半径调用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中的每一行每一列元素、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9556511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存