谷歌卫星地图下载器_谷歌高清卫星地图下载器-水经注软件论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 955|回复: 10

[osgEarth技术] osgEarth数据加载及组织解析

[复制链接]
  • TA的每日心情
    开心
    2014-10-31 09:45
  • 签到天数: 60 天

    [LV.6]常住居民II

    发表于 2014-8-18 09:43 | 显示全部楼层 |阅读模式
    osgEarth数据加载及组织解析

    网盘地址:
    游客,如果您要查看本帖隐藏内容请回复

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-11-11 10:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-11-11 10:31 | 显示全部楼层
    谢谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2015-1-18 13:44
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-1-18 13:51 | 显示全部楼层
    学习学习,感谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-1-24 13:50
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2015-1-24 13:59 | 显示全部楼层
    开始学习OSGEARTH
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-8-23 16:03 | 显示全部楼层
    想查看学习学习下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-9-2 10:30 | 显示全部楼层
    看看大神之作
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2017-4-28 12:41 | 显示全部楼层
    [经验总结] osgEarth显示中文的label [复制链接]
    过客

    该用户从未签到
    3
    主题       
    91
    帖子       
    106
    积分
    三级会员

    积分106
    发消息       
    电梯直达楼主
    发表于 2012-9-27 16:06 | 只看该作者
    把shp的编码改来改去,发现还是乱码,于是感觉问题应该出现在读取数据的环节。
    在osgearth的论坛上看了些别人的问题,找到了显示label的代码src\osgEarthUtil\Controls.cpp的524行,修改如下。
    本帖隐藏的内容

    LabelControl::calcSize(const ControlContext& cx, osg::Vec2f& out_size)
    {
        if ( visible() == true )
        {
            // we have to create the drawable during the layout pass so we can calculate its size.
            LabelText* t = new LabelText();

    #if 1
            // needs a special shader
            // todo: doesn't work. why?
            osg:rogram* program = new osg:rogram();
            program->addShader( new osg::Shader( osg::Shader::VERTEX, s_controlVertexShader ) );
            program->addShader( new osg::Shader( osg::Shader::FRAGMENT, s_labelControlFragmentShader ) );
            t->getOrCreateStateSet()->setAttributeAndModes( program, osg::StateAttribute::ON );
    #endif
    // chinese support.part1 begin 2011-11-14
            setlocale( LC_ALL, "chs" );
    int requiredSize = mbstowcs(NULL, _text.c_str(), 0);
            wchar_t* wtext = new wchar_t[requiredSize+1];
            mbstowcs(wtext, _text.c_str(), requiredSize+1);
            t->setText(wtext);
            delete [] wtext;
            wtext = NULL;
    // chinese support. part1 end 2011-11-14

    // chinese support.part1 begin 2011-11-14
           //t->setText( _text );
    // chinese support. part1 end 2011-11-14


            // yes, object coords. screen coords won't work becuase the bounding box will be wrong.
            t->setCharacterSizeMode( osgText::Text::OBJECT_COORDS );
            t->setCharacterSize( _fontSize );
            // always align to top. layout alignment gets calculated layer in Control::calcPos().
            t->setAlignment( osgText::Text:EFT_TOP );
            t->setColor( foreColor().value() );
            if ( _font.valid() )
                t->setFont( _font.get() );

    // chinese support.part1 begin 2011-11-14
    setlocale( LC_ALL,"C" );
    // chinese support. part1 end 2011-11-14

            if ( haloColor().isSet() )
            {
                t->setBackdropType( osgText::Text::OUTLINE );
                t->setBackdropOffset( 0.03 );
                t->setBackdropColor( haloColor().value() );
            }

            osg::BoundingBox bbox = t->getTextBB();
            if ( cx._viewContextID != ~0u )
            {
                //the Text's autoTransformCache matrix puts some mojo on the bounding box
                osg::Matrix m = t->getATMatrix( cx._viewContextID );
                _bmin = osg::Vec3( bbox.xMin(), bbox.yMin(), bbox.zMin() ) * m;
                _bmax = osg::Vec3( bbox.xMax(), bbox.yMax(), bbox.zMax() ) * m;
            }
            else
            {
                _bmin = osg::Vec3( bbox.xMin(), bbox.yMin(), bbox.zMin() );
                _bmax = osg::Vec3( bbox.xMax(), bbox.yMax(), bbox.zMax() );
            }

            _renderSize.set(
                (_bmax.x() - _bmin.x()) + padding().x(),
                (_bmax.y() - _bmin.y()) + padding().y() );

            _drawable = t;

            out_size.set(
                margin().x() + _renderSize.x(),
                margin().y() + _renderSize.y() );
        }
        else
        {
            out_size.set(0,0);
        }

        //_dirty = false;
    }


    原因是读取字符串的时候就没有支持双字节的字节,如中文。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2017-8-28 14:32 | 显示全部楼层
    学习学习,感谢
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    申请友链|手机版|小黑屋|Archiver|谷歌卫星地图下载器_谷歌高清卫星地图下载器-水经注软件论 ( 蜀ICP备05030520号

    返回顶部
    x

    扫描二维码加群

    GMT+8, 2019-9-20 09:56 , Processed in 3.202414 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表