创建MFC单文档项目,

OSGObject.h

#pragma once
#include <osgViewer\Viewer>
#include <osgDB\ReadFile>
#include <osgViewer\api\Win32\GraphicsWindowWin32>
#include <osgGA\TrackballManipulator> #include <osg\Group> class COSGObject
{
public:
COSGObject(HWND hWnd);
~COSGObject(); void InitOSG();
void InitSceneGraph();
void InitCameraConfig();
void PreFrameUpdate();
void PostFrameUpdate();
static void Render(void* ptr); osgViewer::Viewer* getOsgViewer(); private:
HWND m_hwnd;
osgViewer::Viewer* mViewer;
osg::ref_ptr<osg::Group> mRoot;
};

OSGObject.cpp

#pragma once
#include <osgViewer\Viewer>
#include <osgDB\ReadFile>
#include <osgViewer\api\Win32\GraphicsWindowWin32>
#include <osgGA\TrackballManipulator> #include <osg\Group> class COSGObject
{
public:
COSGObject(HWND hWnd);
~COSGObject(); void InitOSG();
void InitSceneGraph();
void InitCameraConfig();
void PreFrameUpdate();
void PostFrameUpdate();
static void Render(void* ptr); osgViewer::Viewer* getOsgViewer(); private:
HWND m_hwnd;
osgViewer::Viewer* mViewer;
osg::ref_ptr<osg::Group> mRoot;
};

View.h

// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
// (“Fluent UI”)。该示例仅供参考,
// 用以补充《Microsoft 基础类参考》和
// MFC C++ 库软件随附的相关电子文档。
// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
// 若要了解有关 Fluent UI 许可计划的详细信息,请访问
// http://go.microsoft.com/fwlink/?LinkId=238214。
//
// 版权所有(C) Microsoft Corporation
// 保留所有权利。 // View.h : View 类的接口
// #pragma once
#include "Doc.h"
#include "OSGObject.h" class View : public CView
{
protected: // 仅从序列化创建
CMFC_OsgEarth20190901View();
DECLARE_DYNCREATE(View) // 特性
public:
Doc* GetDocument() const; // 操作
public:
COSGObject* mOsgObj;
HANDLE mThreadHandle; // 重写
public:
virtual void OnDraw(CDC* pDC); // 重写以绘制该视图
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected: // 实现
public:
virtual ~View();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif protected: // 生成的消息映射函数
protected:
afx_msg void OnFilePrintPreview();
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
DECLARE_MESSAGE_MAP()
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnDestroy();
virtual void OnInitialUpdate();
}; #ifndef _DEBUG // View.cpp 中的调试版本
inline Doc* View::GetDocument() const
{ return reinterpret_cast<Doc*>(m_pDocument); }
#endif

View.cpp

// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面
// (“Fluent UI”)。该示例仅供参考,
// 用以补充《Microsoft 基础类参考》和
// MFC C++ 库软件随附的相关电子文档。
// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。
// 若要了解有关 Fluent UI 许可计划的详细信息,请访问
// http://go.microsoft.com/fwlink/?LinkId=238214。
//
// 版权所有(C) Microsoft Corporation
// 保留所有权利。 // View.cpp : View 类的实现
// #include "stdafx.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#endif #include "Doc.h"
#include "View.h" #ifdef _DEBUG
#define new DEBUG_NEW
#endif // View IMPLEMENT_DYNCREATE(View, CView) BEGIN_MESSAGE_MAP(View, CView)
ON_WM_CONTEXTMENU()
ON_WM_RBUTTONUP()
ON_WM_CREATE()
ON_WM_ERASEBKGND()
ON_WM_DESTROY()
END_MESSAGE_MAP() // View 构造/析构 View::View()
{
// TODO: 在此处添加构造代码
mOsgObj = ;
mThreadHandle = ;
} View::~View()
{
} BOOL View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式 return CView::PreCreateWindow(cs);
} // View 绘制 void View::OnDraw(CDC* /*pDC*/)
{
Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码
} void View::OnRButtonUp(UINT /* nFlags */, CPoint point)
{
ClientToScreen(&point);
OnContextMenu(this, point);
} void View::OnContextMenu(CWnd* /* pWnd */, CPoint point)
{
#ifndef SHARED_HANDLERS
//theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
#endif
} // View 诊断 #ifdef _DEBUG
void View::AssertValid() const
{
CView::AssertValid();
} void View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
} Doc* View::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(Doc)));
return (Doc*)m_pDocument;
}
#endif //_DEBUG // View 消息处理程序 int View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -)
return -; // TODO: 在此添加您专用的创建代码
mOsgObj = new COSGObject(m_hWnd); return ;
} BOOL View::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if ( == mOsgObj)
{
return CView::OnEraseBkgnd(pDC);
}
else
{
return FALSE;
}
return CView::OnEraseBkgnd(pDC);
} void View::OnDestroy()
{
CView::OnDestroy(); // TODO: 在此处添加消息处理程序代码
if (mOsgObj != )
{
delete mOsgObj;
}
WaitForSingleObject(mThreadHandle, );
} void View::OnInitialUpdate()
{
CView::OnInitialUpdate(); // TODO: 在此添加专用代码和/或调用基类
mOsgObj->InitOSG();
mThreadHandle = (HANDLE)_beginthread(&COSGObject::Render, , mOsgObj); }

MFC加载osg模型的更多相关文章

  1. Qt + OpenSenceGraph(osg) 加载OSG模型

  2. MFC加载大型osg模型

    MFC加载模型,发现打开 Navid 缓冲等选项后,加载大型模型的速度就快了很多. #include "stdafx.h" #include "OSGObject.h&q ...

  3. 6_1 持久化模型与再次加载_探讨(1)_三种持久化模型加载方式以及import_meta_graph方式加载持久化模型会存在的变量管理命名混淆的问题

    笔者提交到gitHub上的问题描述地址是:https://github.com/tensorflow/tensorflow/issues/20140 三种持久化模型加载方式的一个小结论 加载持久化模型 ...

  4. ceisum_加载倾斜摄影模型

    osgb转换为3Dtiles格式(使用工具转换) 然后加载到cesium中(加载代码见下,可以控制模型高度) var offset = function(height,tileset) { conso ...

  5. xBIM 实战02 在浏览器中加载IFC模型文件并设置特效

    系列目录    [已更新最新开发文章,点击查看详细]  在模型浏览器中加载模型后,可以对模型做一些特殊操作.下图是常用的设置. 都是通过 xbim-viewer.js 中的 API 来设置以达到一定的 ...

  6. xBIM 实战01 在浏览器中加载IFC模型文件

    系列目录    [已更新最新开发文章,点击查看详细]  一.创建Web项目 打开VS,新建Web项目,选择 .NET Framework 4.5  选择一个空的项目 新建完成后,项目结构如下: 二.添 ...

  7. cesium 学习(五) 加载场景模型

    cesium 学习(五) 加载场景模型 一.前言 现在开始实际的看看效果,目前我所接触到基本上都是使用Cesium加载模型这个内容,以及在模型上进行操作.So,现在进行一些加载模型的学习,数据的话可以 ...

  8. 开园第一篇---有关tensorflow加载不同模型的问题

    写在前面 今天刚刚开通博客,主要想法跟之前某位博主说的一样,希望通过博客园把每天努力的点滴记录下来,也算一种坚持的动力.我是小白一枚,有啥问题欢迎各位大神指教,鞠躬~~ 换了新工作,目前手头是OCR项 ...

  9. 深度学习之加载VGG19模型分类识别

    主要参考博客: https://blog.csdn.net/u011046017/article/details/80672597#%E8%AE%AD%E7%BB%83%E4%BB%A3%E7%A0% ...

随机推荐

  1. python网络-动态Web服务器案例(30)

    一.浏览器请求HTML页面的过程 了解了HTTP协议和HTML文档,其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作 ...

  2. destoon标签大集合

    最近没事玩上了destoon,所以就自己花一点时间整理了一下destoon标签,对开发有帮助,本篇文章由博客园-圆柱模板  博主整理发布 1.全局标签 网站名称:{$DT[sitename]} 网站地 ...

  3. Enterprise Architect 14破解版 安装包 安装教程

    安装包以及破解补丁下载: 链接:https://pan.baidu.com/s/1es0wN_6-d9pk4xnSN1SiFA 提取码:bor0 安装包链接失效可在下方留言 安装以及破解教程 参考链接 ...

  4. python会缓存小的整数和短小的字符

    经过测试,python会缓存的小整数的范围是 [-5, 256] # True a = 1 b = 1 print(a is b) # True a = "good" b = &q ...

  5. linux系列目录

    一:linux系列部分  linux系列(一):ls命令 linux系列(二):cd命令 linux系列(三):pwd命令 linux系列(四):mkdir命令 linux系列(五):rm命令 lin ...

  6. spark,hadoop集群安装注意

    安装步骤严格参看厦门大学数据实验室教程 Spark 2.0分布式集群环境搭建(Python版) 安装Hadoop并搭建好Hadoop集群环境 遇到的问题 1.ubuntu 安装后升级.python是3 ...

  7. golang go程和出让时间片

    golang go程和出让时间片 func main() { go func(){ //创建一个子go程 ;i<;i++{ fmt.Println("--------fuck U--- ...

  8. vue-d2admin-axios异步请求登录,先对比一下Jquery ajax, Axios, Fetch区别

    先说一下对比吧 Jquery ajax, Axios, Fetch区别之我见 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被JQuery 1 ...

  9. SSM ehcache 配置 mapper 文件出错

    异常 十二月 26, 2017 1:44:49 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertie ...

  10. YII框架的事件机制

    一.什么是事件机制 解释:发生了一件事情,然后某些东西对这件事作出反应. 例子:假设发生了A同学结婚事件,然后B同学给份子钱反应,那么,B是怎么知道(监听)A事件的发生了呢,有两种办法. 扫描式:B不 ...