查看: 2442|回复: 11

osgviewerMFC按下s键就死了,帧速也没有显示出来,有没有人遇到?

[复制链接]
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-7-31 09:31:05 | 显示全部楼层 |阅读模式
    当前使用的OSG的版本是2.9.11,VS2010,XP,不知道大家使用其它的版本有没有遇到同样的问题?

    该用户从未签到

    发表于 2011-8-4 15:01:57 | 显示全部楼层
    Hi Robert,

    I've encountered a strange problem that osgviewerMFC doesn't work well
    with the StatsHandler. When the 's' key is pressed, the rendering
    window will be halted. I tried solving the problem by commenting a
    line in CMFC_OSG_MDIView::OnKeyDown() and it seems to work now.

    Another improvement here is to use a thread class derived from
    OpenThreads to replace the old _beginthread(). It helps a lot in
    keeping a high frame rate when you open more than one MDI child
    windows. And the application using OpenThreads in my opinion will be
    more compatible and portable. So I'd like to submit my changes and see
    if it could work for other Windows developers. :-)

    参见wang rui的帖子,如上

    我自己的理解,viewer在每帧会从消息队列取消息,由eventhandler处理,而事实上mfc也会取消息,路由到OnKeyDown(),也许原因就在这里,我是菜鸟,胡乱想的。

    还有个osgviewermfc还有个问题,那就是内存泄露,那可是一串串的啊,很头疼

    该用户从未签到

    发表于 2011-8-1 08:02:59 | 显示全部楼层
    3.0同死。。。win7 64位

    该用户从未签到

    发表于 2011-8-1 08:41:38 | 显示全部楼层
    OSG 2.x的任何一个版本,WinXP,VS2005/VS2008
    OSG 3.0,Win7 64位,VS2010
    从来无任何问题者飘过

    该用户从未签到

    发表于 2011-8-4 17:18:35 | 显示全部楼层
    我自己的理解,viewer在每帧会从消息队列取消息,由eventhandler处理,而事实上mfc也会取消息,路由到OnKeyDown(),也许原因就在这里
    他们用的都是WndProc下来的消息,不应该是这的问题

    该用户从未签到

    发表于 2011-8-5 00:22:20 | 显示全部楼层
    今天刚编译的OSG 3.0.1,试了一下,果然按s就死,同求真相

    XP, vs2010sp1, osg 3.0.1

    该用户从未签到

    发表于 2011-8-5 08:14:07 | 显示全部楼层
    4楼已经把我在osg-submissions上的帖子发出来了,其中已经给出了解决方法

    该用户从未签到

    发表于 2012-12-20 05:22:53 | 显示全部楼层
    本帖最后由 double 于 2012-12-20 05:23 编辑

    我也是刚用 osg两天,用的是osg3.0。1版,win7 64bit,按下s键,程序阻塞。找了半天原因,终于在我的机器上发现错误了,根本与 onkeydown没有关系,是因为3.01版有一个错误。                  

    for(unsigned int i = viewer->getViewerStats()->getEarliestFrameNumber(); i<= viewer->getViewerStats()->getLatestFrameNumber()-1; ++i) 在 StatsHandler.cpp 的220行。
    当i<=-1时,这个循环就无法中止了。

    该用户从未签到

    发表于 2012-12-21 17:26:34 | 显示全部楼层
    我遇到过,将MFC的oNkeydown的默认函数去掉就可以了

    该用户从未签到

    发表于 2012-12-21 21:48:20 | 显示全部楼层
    本帖最后由 double 于 2012-12-21 21:54 编辑

    我用的是 win7 64bit vs2010 sp1 osg3.0.1。 去掉onkeydown没有用,而且从理论上说,也不应该影响到osg的事件处理。 确实是osg的代码有误。那些去掉onkeydown后,导致程序能正确运行的,我想很可能是去掉 onkeydown的事件,会导致帧率计算正确吧,但onkeydown肯定不是真正出问题的原因所在。 上面array网友发的帖子明显是没有进行认真测试就提交出来的。osg开发人员也不看下究竟就把代码给修改了。

    该用户从未签到

    发表于 2012-12-25 09:44:50 | 显示全部楼层
    哦,我就是osg的开发人员之一。。您如果觉得是其他的问题,欢迎提交到osg-submissions

    该用户从未签到

    发表于 2013-1-8 18:06:51 | 显示全部楼层
    本帖最后由 double 于 2013-1-8 18:08 编辑

    刚跟 robert 沟通了,原来svn/trunk里没有下面的代码。但在打包下载的文件 OpenSceneGraph-3.0.1.zip 中却可以找到下面这行代码。在StatsHandler.cpp文件的 222行。

    for(unsigned int i = viewer->getViewerStats()->getEarliestFrameNumber(); i<= viewer->getViewerStats()->getLatestFrameNumber()-1; ++i) 。

    以后,大家最好还是从 svn/trunk下载代码吧。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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