MFC加载osg模型

匿名 (未验证) 提交于 2019-12-02 23:57:01

创建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 = 0;     mThreadHandle = 0; }  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) == -1)         return -1;      // TODO:  在此添加您专用的创建代码     mOsgObj = new COSGObject(m_hWnd);       return 0; }   BOOL View::OnEraseBkgnd(CDC* pDC) {     // TODO: 在此添加消息处理程序代码和/或调用默认值     if (0 == mOsgObj)     {         return CView::OnEraseBkgnd(pDC);     }     else      {         return FALSE;     }     return CView::OnEraseBkgnd(pDC); }   void View::OnDestroy() {     CView::OnDestroy();      // TODO: 在此处添加消息处理程序代码     if (mOsgObj != 0)     {         delete mOsgObj;     }     WaitForSingleObject(mThreadHandle, 1000); }   void View::OnInitialUpdate() {     CView::OnInitialUpdate();      // TODO: 在此添加专用代码和/或调用基类     mOsgObj->InitOSG();     mThreadHandle = (HANDLE)_beginthread(&COSGObject::Render, 0, mOsgObj);  }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!