是我自己編寫的一個(gè)Ogre基本框架,編譯運(yùn)行是一個(gè)黑色窗口,但是關(guān)閉黑色窗口后任務(wù)管理器中仍然有這個(gè)程序的進(jìn)程在,只能強(qiáng)行結(jié)束,我試過很多方法,運(yùn)用windows循環(huán)、rengderOneFrame什么的,研究了一天一夜也沒能解決,無論如何窗口關(guān)閉后進(jìn)程就是死賴在內(nèi)存了釋放不了,#include <Ogre.h>#include <windows.h>//使用Ogre的命名空間以識(shí)別Ogre提供的類using namespace Ogre;//根據(jù)幀監(jiān)聽父類派生出自己的幀監(jiān)聽子類并自定義幀監(jiān)聽中所要達(dá)到的功能class MyFrameListener : public FrameListener{public:bool frameStarted (const FrameEvent &evt);bool frameEnded (const FrameEvent &evt );};bool MyFrameListener::frameStarted (const FrameEvent &evt){//在每一幀畫面渲染前,調(diào)用這里你寫好的代碼return true;}bool MyFrameListener::frameEnded (const FrameEvent &evt ){//在每一幀畫面渲染后,調(diào)用這里你寫好的代碼return true;}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ){//創(chuàng)建root類得對(duì)象,參數(shù)為默認(rèn)參數(shù)Root* root = new Root("plugins_d.cfg", "ogre.cfg", "Ogre.log");if(!root -> restoreConfig())root -> showConfigDialog();//初始化渲染窗口root -> initialise(true, "亂雨紅塵渡");RenderWindow* window = root -> getAutoCreatedWindow();SceneManager* sceneMgr = root -> createSceneManager(ST_GENERIC, "MySceneManager");Camera* camera = sceneMgr -> createCamera("MainCamera");camera -> setNearClipDistance(5);camera -> setFarClipDistance(1000);camera -> setAspectRatio(Real(1.333333)); //設(shè)置屏幕縱橫比為4:3//創(chuàng)建視口Viewport* vp = window -> addViewport(camera);vp -> setBackgroundColour(ColourValue(0, 0, 0));//設(shè)置渲染循環(huán)(Render Loop)MyFrameListener* myListener = new MyFrameListener();//在這里你需要在調(diào)用startRendering()方法前,注冊(cè)你的幀監(jiān)聽對(duì)象?。?!root -> addFrameListener(myListener);//root -> startRendering();//用更靈活的Root::renderOneFrame()方法使Ogre渲染循環(huán)與windows消息循環(huán)融合,控制循環(huán)始終bool keepRendering = true;//在這里填入所有這個(gè)章節(jié)之前提到的設(shè)置過程://載入插件,創(chuàng)建渲染窗口和場(chǎng)景管理器以及攝像機(jī)和視口,//然后再場(chǎng)景中填入你希望的內(nèi)容。while(keepRendering){//在這里處理引擎使用的網(wǎng)絡(luò)消息。//在這里處理引擎使用的輸入消息。//根據(jù)消息更新場(chǎng)景管理狀態(tài)。//根據(jù)新的場(chǎng)景管理狀態(tài),渲染下一幀。root->renderOneFrame();//檢查是否需要退出渲染循環(huán)if (){keepRendering = false;}}//在這里進(jìn)行你需要的清理工作//然后,關(guān)閉Ogredelete root;}
請(qǐng)幫忙指出問題所在,并在不對(duì)框架做過分改變的前提下修改代碼解決:
波斯汪
2023-01-07 21:13:03