OGRE渲染输出到MFC

转载 2006年05月27日 21:12:00

 

 

折腾了一天基本搞定, 其实也挺容易, 关键要注意几个地方

1)因为不在使用OGRE默认的配置窗口来初始化RenderSystem,现在这一步必须自己来做。首先设置配置文件路径,然后轮询可用的RenderSystem。这里默认使用Direct3D9 Render System
  // 
和原来一样设置插件、资源路径,设置过后就可以轮讯可用的RenderSystem
  setupResources();
  
  // 
指定使用Direct3D9 Render System渲染子系统。
  RenderSystemList *rl = Root::getSingleton().getAvailableRenderers();
  RenderSystemList::iterator it = rl->begin();
  D3D9RenderSystem *mRSys = NULL;
  while( it != rl->end() )
  {
      if( -1 != ( *it )->getName().find( "3D9" )  )
      {
         mRSys = ( D3D9RenderSystem* )( *it );
         break;
      }
      it++;
   }

   // 配置框中的选项需要手动设置。
   mRSys->initConfigOptions();
   mRSys->setConfigOption( "Anti aliasing", "None" );
   mRSys->setConfigOption( "Floating-point mode", "Fastest" );
   mRSys->setConfigOption( "Full Screen", "No" );
   mRSys->setConfigOption( "Rendering Device", "NVIDIA GeForce2 MX/MX 400" );
   mRSys->setConfigOption( "VSync", "No" );
   mRSys->setConfigOption( "Video Mode", "640 x 480 @ 32-bit colour" );

   // 起用
   mRoot->setRenderSystem( mRSys );

2)剩下的初始化过程和ExampleApplication基本一致,只不过现在不需要由OGRE自动创建窗体,应该将MFC视图的句柄传过去初始化。
   // 
初始化,传入false表示不需要OGRE自动创建窗口
   mRoot->initialise( false );
   
   // 
手动创建渲染窗口,在这里我们将MFC视图的句柄传入
   NamevaluePairList miscParams;
   miscParams["externalWindowHandle"] = StringConverter::toString( ( size_t )mWnd );
   mWindow = mRoot->createRenderWindow( "View", 640, 480, false, &miscParams );

到次初始化过程已经完毕,这时候运行程序就得到一个漆黑的MFC窗口。

3)因为现在使用是视图的WndProc,我们必须自己处理更新和触发FrameStart事件.
  
   // 
触发FrameStart, FrameEnd事件 
   void update( void )
   {
     mRoot->_fireFrameStarted();
     mWindow->update();
     mRoot->_fireFrameEnded();
    }

   //在视图的OnDraw时间里,调用update
   void CMFCRenderView::OnDraw(CDC* /*pDC*/)
   {
      CMFCRenderDoc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      if (!pDoc)
        return;

      // TODO: 在此处为本机数据添加绘制代码
      update();
    }
 
这样还不够,WM_PAINT事件并不由我们控制,当窗体静静的趟在那的时候是不会触发的,因此我们通过设置一个timer来模拟没帧的更新,
   // 20ms
触发一次
   SetTimer( 100, 20, 0 );
   
   void CMFCRenderView::OnTimer(UINT nIDEvent)
   {
      // TODO: 
在此添加消息处理程序代码和/或调用默认值
      update();

      __super::OnTimer(nIDEvent);
   }

OGRE 渲染 到 MFC

网上睇到一个OGRE——MFC的代码 就是在mfc 单文挡架构下 cview 里面 onpait 这个消息函数加个settimer 刷新UI 然后 嗯 无了 我在这个之上 将CView继成...

Ogre嵌入MFC的例子

  • 2011年08月23日 10:23
  • 7.26MB
  • 下载

Ogre for mfc

  • 2009年11月13日 11:22
  • 31KB
  • 下载

ogre嵌入MFC教程

由于实验室项目的需要,要学习ogre嵌入MFC,在这里把我从小白到实现的过程写下来给大家分享。 首先声明一下,在这里我建的是基于单文档的ogre嵌入MFC,多文档的并没有研究,后面有时间实现了再拿来...

OGRE嵌入MFC(含代码)

  • 2013年04月28日 13:09
  • 541KB
  • 下载

OGRE嵌入MFC(含源码)

一、下载安装OGRE SDK 1、OGRE SDK下载地址:http://www.ogre3d.org/download/sdk 2、安装和普通的软件安装方式相同(默认安装到了盘,E:\OgreS...

Ogre嵌入MFC傻瓜完全教程(三)

经过前两两篇博文的讲解,我们已经完成了渲染工作,但只是渲染而没有交互性,本篇博文我们就来加上事件的处理方法。 首先我们需要为项目添加一个帧监听类:CMyFrameListener,为了直观,在这直接...

将Ogre写入MFC框架中

1. 新建MFC单文档程序 2. 修改项目选项配置     常规 --> 输出目录 --> ../bin/$(ConfigurationName)     常规 --> 中间目录 --> ../...
  • weiqubo
  • weiqubo
  • 2011年11月17日 21:56
  • 1054

将Ogre写入MFC框架中

1. 新建MFC单文档程序2. 修改项目选项配置    常规 --> 输出目录 --> ../bin/$(ConfigurationName)    常规 --> 中间目录 --> ../obj/$(...

最近在研究ogre嵌入MFC(网上找的资料先存着)

OGRE嵌入到MFCOGRE2007-12-10 09:53:59阅读392评论0  字号:大中小 订阅 最近在搞这个在MFC框架上显示OGRE渲染, 开发环境是VS2005.如何嵌入呢,其实不难. ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OGRE渲染输出到MFC
举报原因:
原因补充:

(最多只允许输入30个字)