怎样绘制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 =bs.radius()

osg::ref_ptr<osg::TessellationHints>hints = new osg::TessellationHints

hints->setDetailRatio(0.5f)

osg::Vec3 v = bs._center

osg::ShapeDrawable *shapeBall=new osg::ShapeDrawable(new osg::Sphere(v,radius),hints.get())

shapeBall->setColor(osg::Vec4(1.0f,1.0f,0.5f,0.3f))

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 geode.release()

}

首先,在NASA下载地表图片

ftp://veftp.gsfc.nasa.gov/bluemarble/land_shallow_topo_east.tif

ftp://veftp.gsfc.nasa.gov/bluemarble/land_shallow_topo_west.tif

很大啊,慢慢下

然后在图片所在目录执行以下命令

osgdem --bluemarble-west -t land_shallow_topo_west.tif \

--bluemarble-east -t land_shallow_topo_east.tif \

--geocentric \

-l 12 \

-o earth.ive \

-a earth.osga

然后就等着,这个 *** 作最好晚上上床之前执行,第二天早上就好了,如果你等不及,就把-l 12的数值减小,这个是层次数目。

在osgviewer里面就可以看这个模型了,非常漂亮哦。


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

原文地址: http://outofmemory.cn/bake/11864321.html

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

发表评论

登录后才能评论

评论列表(0条)

保存