我要发帖 回复

中级会员

32

主题

281

积分

0

专家分

:

私信
发表时间 : 2009-3-12 20:57:25 | 浏览 : 1574    评论 : 6
基于obuil的MFC框架,如何实现“切换到另一个acf”,就是关掉当前的重新加载一个新acf呢????????

最近VR访客

yanshan 评论于2009-3-13 21:01:46
我今天尝试了一下,用菜单做了重新加载acf文件
通过关闭vp,然后重新初始化加载实现了动态改变acf文件
但中间我发现切换时间太长
不知道有没有更好的方法
可能我对vp的流程还没理解透彻
stevenww9821307 评论于2009-3-17 21:58:48
哦,怎么实现的,能分享一下吗,邮箱stevenww9821307@163.com
yanshan 评论于2009-3-18 09:00:08

回复 3楼 的帖子

我简单写了一个通过菜单响应的,本人刚入门写的可能不好,献丑了,希望指正 !!
void CMFCView::OnModelHill()
{
if (vpKernel::instance()->isConfigured())
          {   vpKernel::instance()->breakFrameLoop();
                  vpKernel::instance()->unconfigure();
              vp::shutdown();
          }
         
     KillTimer(1);
    int result; // vsgu::SUCCESS or vsgu::FAILURE
     result = vp::initialize(__argc, __argv);
     assert(result == vsgu::SUCCESS);

    // set acf file
    CString acfFile;

if (__argc <= 1)
  acfFile = "hill.acf";
else
acfFile = __argv[1];

    // load acf file

        result = vpKernel::instance()->define(acfFile);//这里你可以加载自己的acf文件
   // assert(result == vsgu::SUCCESS);
   
       
        
    // configure Vega Prime
    result = vpKernel::instance()->configure();
   // assert(result == vsgu::SUCCESS);


    // assuming at least one window in acf
    assert(vpWindow::size() != 0);

    // get the first Vega Prime window
    vpWindow *vpWin = *vpWindow::begin();

    // set this MFC View window as the parent of the Vega Prime window
    vpWin->setParent(m_hWnd);

    // remove the Vega Prime border (use MFC parent window border instead)
    vpWin->setBorderEnable(false);

    // let MFC parent window determine our size by filling the MFC parent
    // window frame
    vpWin->setFullScreenEnable(true);



    // We can force the Vega Prime window open by calling beginFrame/endFrame
   
    //   NOTE: OnActivateView requires the Vega Prime window open before it is
    //         called.  If it is not open, the Vega Prime window will never
    //         get focus and thus will not handle keyboard input.

    int frameNum = vpKernel::instance()->beginFrame();
    assert(frameNum != 0);

    result = vpKernel::instance()->endFrame();
   assert(result == vsgu::SUCCESS);
        const int TIMER_ID = 1;
        int returnValue = SetTimer(TIMER_ID, 10, NULL);   
        assert(returnValue == TIMER_ID);
}
stevenww9821307 评论于2009-3-18 20:10:21
我也是想用菜单相应,我也是新手,一起学习
henry0henry 评论于2009-3-23 10:35:02
重新加载acf的方法 就是先关掉vp,然后vp的配置过程再走一遍。由于是重新走的,加载当然比较慢。但是可能出现线程资源泄漏的问题。
danielqiu 评论于2009-4-9 21:47:39
楼上说的线程资源泄漏问题,有解决方法吗?被困惑了好几天了,急啊!!!!

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-10-30 03:58 PM

返回顶部