坐标系节点

来源:互联网 发布:js 转动效果 编辑:程序博客网 时间:2024/06/07 01:03

osg::CoordinateSystemNode 类继承自osg::Group节点,它的主要作用是使一个场景的对象关联一个坐标系统。
CoordinateSystemNode 成员函数:
void set(const CoordinateSystemNode &csn) ;//通过复制坐标系节点,设置坐标系节点
void setCoordinateSystem(const std::string &cs) ;//设置坐标系
void setEllipsolidModel(EllipsolidModel *ellipsode) ;//设置椭球模型
void setFormat(const std::string &format) ;//设置坐标系的字符串,如WKT,PROJ4等
osg::EllipsoidModel节点(椭圆体模型节点)主要用来模拟天体、,默认情况下是地球体。osg::EllipsoidModel节点还有一个作用就是实现经纬度与坐标之间的转换,这样可以实现天体椭球原体模型子节点的精确定位。

#include <osgViewer/Viewer>#include <osg/Node>#include <osg/Group>#include <osg/Geode>#include <osg/CoordinateSystemNode>#include <osg/ShapeDrawable>#include <osgDB/ReadFile>#include <osgDB/WriteFile>#include <osgUtil/Optimizer>osg::ref_ptr<osg::Node> createEarth() {    //创建一个球体    osg::ref_ptr<osg::ShapeDrawable> sd = new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0 , 0.0 , 0.0) , osg::WGS_84_RADIUS_POLAR)) ;    osg::ref_ptr<osg::Geode> geode = new osg::Geode() ;    geode->addDrawable(sd.get()) ;    //设置纹理    std::string filename("Images/land_shallow_topo_2048.bmp") ;    geode->getOrCreateStateSet()->setTextureAttributeAndModes(0 , new osg::Texture2D(osgDB::readImageFile(filename))) ;    //创建坐标系节点    osg::ref_ptr<osg::CoordinateSystemNode> csn = new osg::CoordinateSystemNode ;    //设置椭圆体模型,默认坐标系为wGS-84    csn->setEllipsoidModel(new osg::EllipsoidModel) ;    csn->addChild(geode.get()) ;    return csn.get() ;}int main(){    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer() ;    osg::ref_ptr<osg::Group> root = new osg::Group() ;    //添加到场景    root->addChild(createEarth()) ;    osgUtil::Optimizer optimizer ;    optimizer.optimize(root.get()) ;    viewer->setSceneData(root.get()) ;    viewer->realize() ;    viewer->run() ;    return 1 ;}
0 0