• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ACG狂人

            其實我更愛姐汁...

            備忘隨筆系列1:MFC與OGRE聯姻注意事項

            細節決定那啥來著,一些細節雖然不是什么難事,但是一旦卡住總是會很煩心,需要太多時間去調試,耽誤的是寶貴的項目進度,所以我將在這里把一些總結貼出來,愿能給國內的游戲技術圈同僚們一點小幫助,節約寶貴的時間,畢竟總是在網絡上攝取營養,算是回報社會吧。

            本文記錄最近發現的一些 MFC 和 OGRE1.7.2版本 聯姻的注意事項:

            問題1:創建Ogre的CView窗口后,無法截獲鼠標點擊和移動信息,只能獲取鼠標滾輪信息。
            原因及解決方案:傳遞CView窗口句柄時,請一定使用externedWindowHandle的屬性key,切記不要使用parentWindowHandle,因為parentWindowHandle是讓CView成為渲染窗口的父窗口,鼠標鍵盤消息都不會路由到CView上,而是在渲染窗口里被截獲;而externedWindowHandle是讓CView窗口本身成為渲染窗口,所以CView才能正常截獲到輸入消息。

            問題2:當解決問題1之后,發現使用externedWindowHandle繪制出的窗口很小,而使用parentWindowHandle時則正常
            原因及解決方案:注意繼承CView::OnSize()函數響應WM_SIZE消息,但請切記:千萬別在OnSize中調用Ogre::RenderWindow::resize()函數,這會導致OnSize()函數的遞歸回調,因為Ogre::RenderWindow::resize()函數中會調用AdjustWindow()和SetWindowPos()函數,這會導致發送WM_SIZE消息并縮小窗口,從而導致問題的發生。

            問題3:如何解決窗口重置大小的問題
            解決方案:在OnSize()中不能調用Ogre::RenderWindow::resize()函數,而應該調用Ogre::RenderWindow::windowMovedOrResized()函數,通知RenderWindow在渲染前重新設置Viewport的寬高比例。

            問題4:怎樣確保主渲染循環
            分析:上網看了一些相關的解決方案,發現大多使用WM_TIMER消息來維持OGRE的主渲染循環,這應該是下下策的方案了吧......當然還有其他的實現方案,譬如開另一個線程,這個方法還是可行的,但是總有些不對味,因為渲染明明應該在主線程中才是最佳方案。于是我就看了一下MFC閑下來的時候都干了些什么,最后發現了以下解決方案,應該算是很不錯但并不難的解決辦法了,為什么沒見網上有人提供這樣的方案讓我很不理解,窩著藏著也得不到半點好處:
            解決方案:使用空閑回調。該回調是需要繼承CWinApp::OnIdle()函數(好像是叫這個,反正肯定帶Idle這個單詞),當主線程中的消息循環沒有取到消息時(調用PeekMessage()沒有獲取到消息),就會去調用這個函數,于是......就在這個函數里調用繪制一幀吧:Ogre::RenderWindow::update(),另外有動畫的話還需要調用Ogre::Root::_fireFrameRenderingQueued(),因為動畫更新在這里。如果是想讓所有渲染對象都更新一幀的話,直接調用Ogre::Root::renderOneFrame()吧。

            解決方案不一定最好,也不一定適合你的情況,但愿能盡微薄之力,也是作為我個人的備忘吧。

            posted on 2010-12-23 01:39 釀妹汁 閱讀(2671) 評論(6)  編輯 收藏 引用 所屬分類: C++備忘

            評論

            # re: 備忘隨筆系列1:MFC與OGRE聯姻注意事項[未登錄] 2010-12-23 10:37 yy

            經過百余年的借鑒、融合、探索、創造的中國油畫,在新世紀更顯現出融入中華民族血液的自覺意識,人文精神的高揚及對現實的關懷,題材內容、形式風格和手法的多樣化成為當代油畫家的重要特征。此信息由
            西安人才網:http://www.xa198.com
            中國畫廊網:http://www.hl198.com
            中國畫家網:http://www.rc900.com
            提供!
            近日,“今日之神話——龐茂琨個展”在上海美術館開幕。2009-2010年創作的近20幅油畫作品,以及60幅這些油畫創作的部分草圖、手稿等,構成了被譽為“天才學院畫家”的龐茂琨在內地的首次大型個展。  回復  更多評論   

            # re: 備忘隨筆系列1:MFC與OGRE聯姻注意事項 2010-12-23 17:05 陳梓瀚(vczh)

            我覺得renderwindow.resize沒有調用renderwindow.windowmovedorresized就是個bug啊  回復  更多評論   

            # re: 備忘隨筆系列1:MFC與OGRE聯姻注意事項 2010-12-23 22:54 釀妹汁

            @陳梓瀚(vczh)
            有時候方法分開會靈活一些吧......嘛...都是一些小細節  回復  更多評論   

            # re: 備忘隨筆系列1:MFC與OGRE聯姻注意事項 2010-12-25 01:38 陳梓瀚(vczh)

            @釀妹汁
            類要【公開狀態】【隱藏實現】【保持操作前后狀態的完整性】啊  回復  更多評論   

            # re: 備忘隨筆系列1:MFC與OGRE聯姻注意事項 2010-12-25 14:25 釀妹汁

            @陳梓瀚(vczh)
            嗯哪,有時候項目大了就有可能無法完全達到理想設計,很多設計理念也都是架構師們追求的終極目標,并非是任何情況下都能夠完全達到的。  回復  更多評論   

            # re: 備忘隨筆系列1:MFC與OGRE聯姻注意事項 2011-03-30 11:45 chen

            CWinApp::OnIdle()函數,有人提及,但繪制幀速率不穩定。因為MFC內部不應該使用peekmessage,而是用postmessage。  回復  更多評論   

            久久久免费精品re6| 99精品国产99久久久久久97| 日韩人妻无码精品久久久不卡| 亚洲精品乱码久久久久久久久久久久 | 66精品综合久久久久久久| 国产女人aaa级久久久级| 久久精品无码av| 久久久久久亚洲Av无码精品专口| 国产精品久久久久影院色| 狠狠人妻久久久久久综合| 伊人色综合久久天天人手人婷| 国产精品久久久久影院嫩草| 亚洲综合久久久| …久久精品99久久香蕉国产| 武侠古典久久婷婷狼人伊人| 久久久久成人精品无码中文字幕 | 蜜桃麻豆WWW久久囤产精品| 久久99国内精品自在现线| 久久久无码精品午夜| 久久精品国产网红主播| 久久精品极品盛宴观看| 国产一区二区精品久久凹凸| 人妻丰满AV无码久久不卡| 久久人人爽人人爽人人片AV东京热 | 狠狠色丁香婷综合久久| 亚洲国产精品无码久久久蜜芽| 天天久久狠狠色综合| 久久超碰97人人做人人爱| 漂亮人妻被黑人久久精品| 亚洲一级Av无码毛片久久精品| 国产精品欧美久久久久天天影视| 国产麻豆精品久久一二三| 久久精品国产亚洲av麻豆小说| 久久久久亚洲av综合波多野结衣| 久久久久亚洲av成人无码电影| 久久线看观看精品香蕉国产| 人妻久久久一区二区三区| 欧洲成人午夜精品无码区久久| 色综合久久中文字幕无码| 久久精品免费一区二区| 亚洲色婷婷综合久久|