MFC窗口系统下的OSG简单框架
来源:互联网 发布:淘宝的经营模式分析 编辑:程序博客网 时间:2024/06/07 05:54
最近学习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
- MFC窗口系统下的OSG简单框架
- MFC窗口系统下的OSG简单框架
- OSG在MFC多窗口的使用
- MFC下创建一个简单的窗口
- 在MFC框架下使用osg报内存泄露的解决办法
- 在MFC框架下使用osg报内存泄露的解决办法
- 最简单的MFC窗口创建_框架
- OSG中使用MFC窗口的一点启示
- 应用MFC框架显示OSG
- 第二讲MFC+OSG框架
- MFC OSG中文件显示窗口不全,无法满屏的情况
- MFC 窗口基本框架
- 最简单的MFC窗口程序
- vs2010最简单的MFC窗口程序
- vs2008最简单的MFC窗口程序
- mfc下报OSG内存泄漏解决方法
- mfc下报OSG内存泄漏解决方法
- MFC框架下的程序设计
- Activity四大组件之Service 方式一startService
- Markdown 语法
- C/C++程序编译步骤 如何生成可执行文件
- MySQL索引类型
- 【POJ1061】:青蛙的故事(未AC版)
- MFC窗口系统下的OSG简单框架
- <context:component-scan base-package=com.xxx.xxx/ >包扫描注解
- 管理理念:小米成功启示录--团队第一,产品第二
- VS2013 编译 MySql Connector C 6.1.6
- PHP的魔术方法
- 张小龙:如何把产品做简单
- unity EasyTouch虚拟摇杆的使用(边界情况处理)
- Hadoop作业调度算法
- Android应用的界面编程简述1