将KlayGE嵌入到MFC
来源:互联网 发布:淄博淘宝司法拍卖 编辑:程序博客网 时间:2024/05/16 00:57
说明:
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!
- 将KlayGE嵌入到MFC
- 将Cocos2dx 3.4 嵌入到MFC中
- 将MFC dll中的窗口嵌入到工程窗口中
- 将QT窗口嵌入到MFC中的方案
- 将opencv图像嵌入到MFC控件中
- OGRE嵌入到MFC
- OGRE嵌入到MFC
- OGRE嵌入到MFC
- KlayGE
- 嵌入CEF到MFC程序
- 第一部分:将GOOGLE MAP嵌入到MFC的对话框程序中
- 第二部分:将MPLAYER 嵌入到MFC的对话框程序中
- CEF3自研究笔记 三、将CEF嵌入到MFC对话框程序中去
- 将cef3嵌入到mfc对话框中,当程序退出时报错,怎么解决?
- 将opencv的窗口嵌入到MFC的picture control中
- 将窗体嵌入到Panel
- 嵌入Chrome cef到MFC CView
- CEF嵌入到单文档mfc
- Minix 源代码阅读 MasterBoot
- VMware Tool安装
- JAVA性能优化—编写符合GC胃口的程序
- C#关键字完整列表
- 内存分配
- 将KlayGE嵌入到MFC
- about tencent
- 一些可以让人可以开心的方法
- Oracle 解决表锁定的问题
- linux下文件操作
- 男人的心情
- 简谈Ubuntu下robocup2d仿真环境的配置
- 人生的放弃与洒脱
- ListView排序