`
yanfaguanli
  • 浏览: 661258 次
文章分类
社区版块
存档分类
最新评论

将KlayGE嵌入到MFC

 
阅读更多

说明:

1、KlayGE是一款国人开发的开源游戏引擎(http://klayge.sourceforge.net/),以下都是以KlayGE3.8.0而言,并且假定您已经可以编译该引擎(具体可以参看readme.html,有一点需要提醒由于KlayGE使用了动态运行时库,所以boost都会使用动态库版本,例如boost::signals, boost::filesystem等,运行时不要忘了相关dll文件)并且可以运行给定的demo。

2、KlayGE和Ogre都是相当优秀的开源游戏引擎,个人感觉Ogre设计上更为灵活,这是其最值得学习的地方;而KlayGE则在技巧和技术上有更多可以学习的地方(他的设计也是相当优秀的,至少是我辈望尘莫及的),例如boost库的大量使用(尤其是boost::signals和boost::python),强大的字体系统(与Ogre的字体系统对比一下就知道了),与python的结合等。

3、MFC只是提供了一个GUI框架,还可以有更多的选择,wx,qt,甚至是.net Framework等。

4、本文并没有完美的实现嵌入,至少KlayGE自带的GUI系统嵌入后就无法正常使用了。并且由于KlayGE没有开放单独绘制一桢这样的函数,所以直接关闭程序会有内存泄漏和异常。以后再研究研究,试着把相关功能提取一下,做成和Ogre一样的,那样就可以在OnIdle()和OnPaint()时渲染一桢,在OnDestory()时清理资源。

~~~~~~~~~~~~~~~~~~~~~哥不是分界线,是寂寞~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

KlayGE本身并没有为嵌入MFC做过考虑(这似乎也是正常的),但是假如我们要做一款编辑器或是其他什么东东,需要用到这方面的功能。KlayGE源代码的修改是必须的。

KlayGE工程,window.hpp/cpp,class Window 这个类就是一个窗口,KlayGE会在构造函数的时候CreateWindow,而我们所要做的就是创建另一个构造函数,传入一个HWND,这个构造函数不会CreateWindow。如下:

这里多添了一个成员变量m_bIsExternal,如果是外部传入的窗口句柄,那么window在析构的时候就不销毁窗口。

Window的创建是在App3D.hpp/cpp中App3DFramework类的构造函数中进行的,建立一个3D程序必须继承这个类。同理我们需要添加一个传入HWND的构造函数。

这样我们的准备工作就完成了。接下来就是建立一个MFC程序(单文档或多文档均可),选择一个Demo插入到工程中,在合适的位置初始化(我个人喜欢把Demo的头文件包含在CXXXXApp.h中,并在BOOL CXXXXApp::InitInstance()中的ShowWindow之前初始化,因为这个时候View肯定已经创建完成了。别忘了using namespace KlayGE;),最后删除原Demo中的main函数。

ResLoader开始,注意这里的资源位置要正确,并且KlayGE的Demo中使用的都是.kui .kfx这样加密成二进制的文件。把对应的xml文件(如 .uiml .fxml)插入到工程中vs会自动编译的。

好了,一切就绪,编译……………………等等,怎么出现一大堆错误?

原来是windef.h中的min max宏定义和std::min std::max冲突了,在有冲突的头文件开头加入#undef min和#undef max(我加在mathhelper.hpp和elementformat.hpp中)就好了。

ok, enjoy yourself!

KlayGEMFC

分享到:
评论

相关推荐

    KlayGE引擎

    KlayGE引擎

    KlayGE-4.17.tar.gz

    Linux,粘土游戏引擎(KlayGE)是一个开放源代码的,跨平台的,基于插件结构的游戏引擎。该引擎从2003年开始研发,设计目的是用最先进的技术武装引擎,使游戏的开发、测试、移植得到简化。

    KlayGE:KlayGE是具有基于插件的体系结构的跨平台开源游戏引擎

    克莱 KlayGE是具有基于插件的体系结构的跨平台开源游戏引擎。 它从2003年开始。KlayGE的明确目标是:用最先进的技术武装您的引擎。 它提供了使游戏开发,测试,移植尽可能简单的框架。入门在编译KlayGE之前,必须先...

    KlayGE-4.17.zip

    windows,粘土游戏引擎(KlayGE)是一个开放源代码的,跨平台的,基于插件结构的游戏引擎。该引擎从2003年开始研发,设计目的是用最先进的技术武装引擎,使游戏的开发、测试、移植得到简化。

    KlayGE-基于OPENGL的3D游戏引擎

    KlayGE是基于OPENGL的3D游戏引擎之一,采用Pure C++开发,编译方法可以参照网络上的文档,效果一流的棒。

    cpp-KlayGE是一个基于插件架构的跨平台开源游戏引擎

    KlayGE是一个基于插件架构的跨平台开源游戏引擎

    KlayGE2Git:为 KlayGE 转换为 Git 的工具

    KlayGE2Git 为 KlayGE 转换为 Git 的工具...将这些文件与 KlayGE 的 hg 一起复制到文件夹中。 ResourceFiles.py:将当前修订版中的大资源文件分离到另一个文件夹。 GenSlimFileMap.py:生成整个历史中的大文件列表。

    KlayGE是具有基于插件的体系结构的跨平台开源游戏引擎。-C/C++开发

    KlayGE KlayGE是具有基于插件的体系结构的跨平台开源游戏引擎。 它从2003年开始。KlayGE的明确目标是:用最先进的技术武装您的引擎。 它为ma KlayGE提供了框架。KlayGE是具有基于插件的体系结构的跨平台开源游戏引擎...

    hge开发必备之开发包和实例

    KlayGE,http://klayge.sourceforge.net/ 这是国人写的开源引擎 2D: HGE,http://hge.relishgames.com/ Amanith,http://www.amanith.org/blog/index.php  一款真正意义上的跨平台引擎,支持很多平台的编译器

    RcEngine:RcEngine 是一个用 C++ 实现的图形引擎,灵感来自 OGRE 和 KlayGE

    RcEngine 是一个用 C++ 实现的图形引擎,受到 OGRE 和启发。 ###特征: Direct3D11 或 OpenGL 4.2+ 渲染系统。 XML baded Effect 系统、HLSL 或 GLSL 着色器、字节码缓存(未完成)。 支持各种着色器,包括...

    各编译器对C++11的支持比较

    在 KlayGE 首次引入 C++11 特性之后,我顺便调研了一下个主流编译器对 C++11 的支 度,以便在下个版本中加入更多的 C++11 元素。这里还列出了在不支持的时候,可以采 的替代方案。主要参考了 C++11 Features in ...

    Klay Game Engine-开源

    KlayGE是具有跨插件架构的开源,跨平台游戏引擎。 它提供了使游戏开发,测试,移植尽可能简单的框架。

Global site tag (gtag.js) - Google Analytics