楼主既然知道怎么绘制包围盒边框,那绘制包围球不也类似吗。先得到节点的包围球,再得到包围球的中心坐标和半径,再根据取得的中心坐标和半径调用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();
}
可是我的贴图文件是不到8个字符啊,而且是英文,3DS模型和贴图文件的位置有没有要求呢?开始我把3ds单独放在data文件夹里面,结果读出来没有纹理,然后把他们放在同一个文件夹,再放到data文件夹里,结果加载后显
1、错误描述
编译完OSG,运行osgViewerexe获取网络的osg格式数据,在读取osg数据时报错“无法定位序数354于动态链接库libeay32dll”
2、修复尝试
拷贝3rdParty_VC11_x86_x64目录中的libeay32dll覆盖当前的libeay32dll,还是持续报错。
最好尝试将3rdParty_VC11_x86_x64中与OSG程序相关的dll都拷贝并覆盖运行程序同目录下的dll。最终运行osgViewerexe
3、解决方案
osgViewerexe同级目录下的某一dll文件所依赖的libeay32dll的版本高于当前的依赖版本。所以剔除了此依赖关系,就可正常运行。
遇到此问题时,可换种思路,替换依赖libeay32dll的库文件。
以上就是关于怎样绘制osg包围球框(就像包围盒框那样),急急急急全部的内容,包括:怎样绘制osg包围球框(就像包围盒框那样),急急急急、怎样用3DSMAX导出带有纹理效果的OSG文件、无法定位序数354于动态链接库libeay32.dll上如何解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)