让Ogre使用外部渲染窗口
2014-09-14 08:28
246 查看
就是让Ogre不自己创建渲染窗口,而由第三方来创建。比如C#写界面、Qt等等。
对Ogre的例子浏览器SampleBrowser.h的setup函数做了如下修改。
但是为了混合,我使用了DLL的方式,把SampleBrowser输出为了DLL,然后再通过一个全局函数导出。
关键代码就第一段,你想往哪输出渲染就往哪。在Windows下DLL是一定被支持的,如果你将它弄成组件形式,那就更方便,但会增加易理解性。
C#端,用Kernel32.dll内的
LoadLibrary GetProcAddress 来动态加载DLL内的导出函数。
注意,C#内的委托,相当于函数指针。
Ogre::NameValuePairList params; params["externalWindowHandle"] = Ogre::StringConverter::toString((size_t)(HWND)mWndHandle); mRoot->initialise(false); mWindow = mRoot->createRenderWindow("SampleBrowser", mWidth, mHeight, false, ¶ms);
对Ogre的例子浏览器SampleBrowser.h的setup函数做了如下修改。
/*-----------------------------------------------------------------------------
| Extends setup to create dummy scene and tray interface.
-----------------------------------------------------------------------------*/
virtual void setup()
{
if(mWndHandle > 0){
Ogre::NameValuePairList params; params["externalWindowHandle"] = Ogre::StringConverter::toString((size_t)(HWND)mWndHandle); mRoot->initialise(false); mWindow = mRoot->createRenderWindow("SampleBrowser", mWidth, mHeight, false, ¶ms);
}
else
if(mWindow == NULL)
mWindow = createWindow();
setupInput(mNoGrabInput);
locateResources();
//...............................
}另外增加两个函数以在外部设置窗口大小,传递外部窗口句柄。
//! 设置外部窗口句柄 void SetWindowHandle(int handle) { mWndHandle = handle; } //! 设置外部窗口大小 void SetWindowSize(int width, int height) { mWidth = width; mHeight = height; }这样只需要在setup()调用前,通过SetWindowHandle设置有效的外部窗口句柄,就可以了。
但是为了混合,我使用了DLL的方式,把SampleBrowser输出为了DLL,然后再通过一个全局函数导出。
关键代码就第一段,你想往哪输出渲染就往哪。在Windows下DLL是一定被支持的,如果你将它弄成组件形式,那就更方便,但会增加易理解性。
C#端,用Kernel32.dll内的
LoadLibrary GetProcAddress 来动态加载DLL内的导出函数。
注意,C#内的委托,相当于函数指针。
public delegate void BrowserMainEx(IntPtr handle, int width, int height);handle就是窗口句柄了,width,height是宽高。
相关文章推荐
- 使用WTL+OGRE编写3D程序(4) - 多窗口的渲染
- 使用Ogre渲染生成的人物行走4-8图
- Ogre中的多窗口渲染方法
- opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示
- OGRE3D入门探索01:将渲染窗口嵌入到Win32主窗口
- 第十七篇:使用窗口的cache属性加速SOUI的渲染
- 物理引擎Havok的一个简单实例(使用Ogre渲染)
- 使用Ogre快速渲染视频纹理
- 使用WTL+OGRE编写3D程序(3) - 场景的创建和渲染
- 使用WTL+OGRE编写3D程序(2) - 窗口消息函数
- opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示
- Ogre中的多窗口渲染方法
- Ogre中的多窗口渲染方法
- 解决Ogre的渲染窗口無法固定大小,隨著MainWindow的變化而變化
- Havok动画渲染Demo(使用Ogre)
- Ogre中的多窗口渲染方法
- OGRE 1.7 鼠标非独占使用(鼠标移出当前窗口)
- 使用 jQuery 在新窗口打开外部链接
- js对浏览器内部及外部窗口宽度及高度使用测试
- OGRE在渲染通路中使用顶点程序和片断程序