OSG的sample里面有OSG+MFC+MDI的例子。
網上有說OSG+MFCSDI的例子,如http://blog.csdn.net/xuguangsoft/article/details/8164104
這里我說一下怎么在MFC對話框上結合使用OSG。
首先,對話框要保持干凈,像醬紫:
然后,在你里osg sample里面找到那個OSG+MFC+MDI的例子(osgviewerMFC),在里面找兩個文件:MFC_OSG.h 和 MFC_OSG.cpp。
把這兩個文件拷到你自己的對話框項目的源代碼目錄下,然后在IDE里面添加到項目中。
接下來:
- 在你的 stdafx.h 中添加上 #include<process.h>
- 在你的工程dlg的頭文件,比如yourdlg.h中添加 #include "MFC_OSG.h"
- 這個時候你的程序是編譯通不過的,會出現好多鏈接error,是因為沒有加OSG庫。添加以下的庫文件
OpenThreadsd.lib osgd.lib osgDBd.lib osgFXd.lib osgManipulatord.lib osgParticled.lib osgShadowd.lib osgSimd.lib osgTerraind.lib osgTextd.lib osgViewerd.lib osgUtild.lib osgGAd.lib
OpenThreads.lib osg.lib osgDB.lib osgFX.lib osgManipulator.lib osgParticle.lib osgShadow.lib osgSim.lib osgTerrain.lib osgText.lib osgViewer.lib osgUtil.lib osgGA.lib
這個時候再把你的程序改為多字節編碼(如果你使用的是unicode編碼的話),然后就可以編譯運行了。當然,是沒什么變化的。
- 在yourdlg.h的類的定義中,添加兩個protected屬性的變量
cOSG* mOSG;
HANDLE mThreadHandle; - 在類向導中為yourdlg類添加消息響應WM_CREATE的函數OnCreate。
int CyourDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialogEx::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您專用的創建代碼 mOSG = new cOSG(m_hWnd); return 0; }
- 在OnInitialDlg()中添加以下代碼,注意這一點與SDI程序不同,SDI程序是要overrideOnInitialUpdate().
mOSG->InitOSG("cow.osg"); mThreadHandle = (HANDLE)_beginthread(&cOSG::Render, 0, mOSG);
- 我不是代碼啊、快放我出去嗚嗚 w_w ●﹏●剛才被困到5后面的代碼區了,幸好窩懂點HTML,改了HTML才跑出來。
- 這個時候程序就可以編譯運行了,你會看到醬紫的:
- 看到這個運行結果很開心吧,但是呢,為了遵循《程序員的自我修養》,你看看第5步里面用了個new,所以還得delete一下。在類向導里面為yourdlg類添加OnDestory函數
void CyourDlg::OnDestroy() { if(mOSG != NULL) delete mOSG; WaitForSingleObject(mThreadHandle, 1000); CDialogEx::OnDestroy(); // TODO: 在此處添加消息處理程序代碼 }