MFC窗口系统下的OSG简单框架

作者:朱金灿
来源:http://blog.csdn.net/clever101/


最近学习OSG,下载了FreeSouth大侠的一个MFC框架RambleSystem,自己学习了一下,新建了一个单文档程序,改了其中一些bug,和大家分享一下。单文档程序实现的功能非常简单,就是打开显示osg文件。不过仍存在一个问题,例如打开一些osg文件显示模型不理想,估计是视口设置有问题;另外打开一些osg文件出现内存泄露。

我使用的是osg 2.8.2的版本,下载地址为(在这个页面也可下载测试数据):
OpenSceneGraph-2.8.2预编译包(for vs9)下载


下载完后我把它放在D:/Program Files/OpenSceneGraph-2.8.2(你也可以把它放在其它位置),然后添加相应的环境变量,具体是运行编译包中的osg_env.bat。


把头文件和库文件包含进来(具体在附加包含文件和附加库目录设置),建一个单文档程序osgSdi (MFC Standard)。

OSG核心类CCoreOSG的接口如下(具体实现请下载源代码):


/* -*-c++-*- OpenSceneGraph - 2008.3.14 by FreeSouth * * 该框架是FreeSouth基于原MDI框架修改,如果您发现该框架有BUG可以到 * bbs.osgChina.org上发帖声明,或是致件作者:ieysx@163.com *谢谢您支持www.osgChina.org *您可以随意的复制,修改,传播该框架 */ //------------------------------//------------------------------ #pragma once #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <osgViewer/api/win32/GraphicsWindowWin32> #include <osgGA/TrackballManipulator> #include <osgGA/KeySwitchMatrixManipulator> #include <osgDB/DatabasePager> #include <osgDB/Registry> #include <osgDB/ReadFile> #include <osgUtil/Optimizer> #include <string> //------------------------------//------------------------------ /**OSG核心类,在这里执行MFC对OSG的大部分的管理功能*/ class CCoreOSG { public: /**构造函数获取上一级窗口句柄*/ CCoreOSG(HWND hWnd); ~CCoreOSG(); /**初始化OSG,参数filename为要加入的模型文件*/ void InitOSG(std::string filename); /**初始化操作器*/ void InitManipulators(void); /**初始化场景*/ void InitSceneGraph(void); /**初始化相机配置*/ void InitCameraConfig(void); /**建立窗口*/ void SetupWindow(void); /**建立相机*/ void SetupCamera(void); /**每帧绘制前处理*/ void PreFrameUpdate(void); //每帧绘制后处理 void PostFrameUpdate(void); //SetDone void Done(bool value) { mDone = value; } //getDone bool Done(void) { return mDone; } //渲染,注意这里是静态的,可启用为全局线程 static void Render(void* ptr); //使用一个名称为filename的模型代替当前场景中的所有模型 void ReplaceSceneData(std::string filename) ; //getViewer osgViewer::Viewer* getViewer() { return mViewer; } private: //Done bool mDone; //模型文件名称 std::string m_ModelName; //窗口句柄 HWND m_hWnd; //viewer osgViewer::Viewer* mViewer; //场景根结点 osg::ref_ptr<osg::Group> mRoot; //场景模型文件 osg::ref_ptr<osg::Node> mModel; //trackball操作器 osg::ref_ptr<osgGA::TrackballManipulator> trackball; //加入KeySwitch选择操作器 osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator; };//end class CCoreOSG //------------------------------//------------------------------


视图类的渲染模型文件的接口如下:


/*! * /brief 渲染模型文件。 * * /param pszSrc 模型文件全路径。 * /return 是否成功。TRUE为成功,FALSE为失败。 */ BOOL CosgSdiView::RenderModelFile(string strModelFielName) { assert(_T("")!=strModelFielName); // m_OSG为上面提到的CCoreOSG类的一个指针变量 if (NULL==m_OSG) { // 假如没有渲染接口,就新建一个并启动渲染线程 m_OSG = new CCoreOSG(m_hWnd ) ; m_OSG ->InitOSG(strModelFielName); m_ThreadHandle = (HANDLE)_beginthread(&CCoreOSG::Render, 0, m_OSG) ; } else { // 直接替掉模型就可以了 m_OSG->ReplaceSceneData(strModelFielName) ; } return TRUE; }



源码下载地址:


MFC窗口系统下的OSG简单框架源码下载


再次感谢FreeSouth大侠!








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值