查看: 5719|回复: 10

请教:osgEarth::Util::Controls的用法

[复制链接]

该用户从未签到

发表于 2012-8-4 10:05:13 | 显示全部楼层 |阅读模式
本帖最后由 imstab 于 2012-8-8 18:48 编辑

将例子程序中使用控件的代码移到自己的VC多文档程序中就是无法使用,请教高手们!最好能给一段代码,跪求!
无标题.jpg

该用户从未签到

 楼主| 发表于 2012-8-8 18:49:13 | 显示全部楼层
爬冰卧雪跪求中。。。。。。。。

该用户从未签到

发表于 2012-8-9 07:47:45 | 显示全部楼层
给什么代码?

该用户从未签到

 楼主| 发表于 2012-8-9 07:58:03 | 显示全部楼层
我试着做了个飞机在地球表面飞的程序,MDI框架用的osg的viewer改的,飞机移动用定时器控制,同时想显示飞机的经纬高,想用util::control里头的label控件显示,按照osgearth里头的例子加入label控件,地址都给了,就是不显示在MDI界面上,后来没办法改用HUD,才可以用,所以想请教一下,osgearth里util里的UI工具在MFC里的使用方法。我按osgearth里头的例子加入了包含文件,也加入了尽量多的lib库。

该用户从未签到

发表于 2012-8-9 19:48:50 | 显示全部楼层
osgEarth::Util::Controls和你用什么界面没啥关系

不知道你的代码中有没有这么使用Controls:
   ControlCanvas* canvas = new ControlCanvas( &viewer );
    root->addChild( canvas );
    Grid* grid = new Grid();

    canvas->addControl( grid );
    grid->setControl( 0, 0, new LabelControl("距离:") );
    LabelControl* label = new LabelControl();
    label->setFont( osgText::readFontFile( "simhei.ttf" ) );
    label->setFontSize( 24.0f );
    label->setHorizAlign( Control::ALIGN_LEFT );   
    label->setText("点击并测量");
    grid->setControl( 1, 0, label );



可参考osgEarth自带的案例osgearth_measure、Sample osgearth_controls

该用户从未签到

 楼主| 发表于 2012-8-15 13:44:03 | 显示全部楼层
奇怪了,我按照不同的例子试了不同的方法,包括ago版主给的,但是label就是不显示出来,是和某个特定的lib有关吗?不知道有没有人碰到过这样的问题

该用户从未签到

 楼主| 发表于 2012-8-20 21:18:45 | 显示全部楼层
我查了一下,每次运行到这里的时候
void OSGEarthEngine::Render( void* ptr )
{
        OSGEarthEngine* osg = (OSGEarthEngine*)ptr;
        osg::ref_ptr<osgViewer::Viewer> viewer = osg->getViewer();
就会出现下面的问题
OSGEarthExampleTest.exe 中的 0x74c9b9bc 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0799ecc0 处的 std::bad_alloc。
线程 'Win32 线程' (0x1020) 已退出,返回值为 0 (0x0)。
看了一下源码,ControlCanvas好像也是一个相机,而且自己开了个线程,不知道是不是会有冲突,请教在MFC中已经显示label成功大牛们,是否还需要加一些其它的语句?

该用户从未签到

发表于 2013-1-11 16:30:37 | 显示全部楼层
不知道lz的问题解决没有啊?
我也困扰好久了,MFC下就是一直不能显示....

该用户从未签到

发表于 2013-5-29 14:09:21 | 显示全部楼层
同样遇到这个问题,过来顶一下

该用户从未签到

发表于 2013-5-31 16:52:54 | 显示全部楼层
已经解决了,通过跟踪代码发现是由于ViewportHandler这个类中 的bool handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa )中的cam->getViewport()值为空造成的,而造成值为空的原因是由于添加相机到VIEWER中时用的addSlave方法,这个是osgmfc例子中使用的,请教Array后得到的答案是  setCamera是唯一的选择,没事别用addSlave。所以将addSlave 改成setCamera问题解决。

该用户从未签到

发表于 2021-4-13 11:10:37 | 显示全部楼层
bpcbcm 发表于 2013-5-31 16:52
已经解决了,通过跟踪代码发现是由于ViewportHandler这个类中 的bool handle( const osgGA::GUIEventAdapte ...

想请问下,我的代码在MFC里一直显示不了,这个要在哪里做更改,我找不到addSlave
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表