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

news/2024/5/18 16:01:39 标签: MFC, 框架, 配置管理, BBS, .net

作者:朱金灿
来源: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大侠!









http://www.niftyadmin.cn/n/586116.html

相关文章

mysql错误1273_mysql8 参考手册--错误代码1273-1294

错误号1273; 符号&#xff1a; ER_UNKNOWN_COLLATION; SQLSTATE&#xff1a; HY000消息&#xff1a;未知归类&#xff1a;&#xff05;s错误号1274; 符号&#xff1a; ER_SLAVE_IGNORED_SSL_PARAMS; SQLSTATE&#xff1a;HY000消息&#xff1a;CHANGE MASTER中的SSL参数将被忽略…

记一次拆分前后端模块部署Jar过程

背景 单体应用&#xff0c;前端使用React框架&#xff0c;静态资源&#xff08;JS&#xff0c;CSS等&#xff09;都放在src\main\resources\static目录下面&#xff1a; .babelrc .gitignore .mvn node_modules package-lock.json package.json pom.xml src --main--java--re…

解决Intellij IDEA 编译运行时出现Error running xxxApplication Command line is too long

我的网站上线了&#xff1a;http://javapub.net.cn/ 文章目录异常信息解决异常信息 Error running YudaoServerApplication. Command line is too long. Shorten the解决 解决方法1 在本项目文件夹 .idea/workspace.xml 中找到 <component name"PropertiesComponent&…

【STM32 .Net MF开发板学习-03】TinyGUI绘图示例

.Net Micro Framework官方图形库是WPF&#xff0c;由于目前ST Cortex-M3开发板RAM太小&#xff0c;最大才512K&#xff08;常见是128K或256k&#xff09;&#xff0c;并且Cortex-M3的CPU主频也不太高&#xff0c;运行WPF图形框架显得过于重了&#xff0c;所以我这边推出了轻量级…

oracle换端口 sde_arcsde 链接oracle ,配置空间数据库(附带史上最全oracle安装步骤)...

想好好的来一次排版&#xff0c;让你们看的舒服我也写的舒服&#xff0c;但是一到写的时候&#xff0c;又不知道如何去下手。。。算了直接一步步来吧。数据库加油&#xff01;你是最土的~~安全首先咱们要进行准备工做&#xff0c;那就是先装好oralce 11g的服务端和客户端&#…

vue npm启动报错-解决

我的网站已上线&#xff1a;http://javapub.net.cn/ 文章目录异常解决如果还没解决异常 PS E:\myworkpace\pub-admin-vue> npm run dev > ruoyi3.8.2 dev > vue-cli-service serveERROR Error: Cannot find module babel-plugin-transform-vue-jsx Require stack: -…

which,whereis,locate,find (档案的搜寻)之间的区别

which,whereis,locate,find (档案的搜寻)&#xff1a; 查询系统档案时&#xff0c;通常不大用 find 的&#xff01;因为速度慢之外&#xff0c;也很操硬盘&#xff01;但不可否认&#xff0c;find的功能很强大。通常我们都是先使用 whereis 或者是 locate 来检查&#xff0c;如…

springboot 自定义制作开机启动

免费开源 后端俩万管理系统官宣发布&#xff1a;https://github.com/Rodert/liawan-vue 文章目录后端俩万管理系统官宣发布&#xff1a;预览 /$$ /$$ /$$$$$ /$$$$$$$ /$$ …