開發環境
ogre 1.72
qt 4.5.2
直接看源碼:
https://3dlearn.googlecode.com/svn/trunk/Samples/Ogre/OgreQt用了一個tab控件,在其中嵌入了一個叫ogrewidget的窗子,作為ogre渲染表面。當然tab不是主窗口,主窗口是mainwindow,tab只是貼在主窗口上。這是從ogitor中抄過來的,這樣做很方便擴展更多的窗口控件。

挺折騰的,本來以為三下五去二就可以搞定,實際卻碰到一些意向之外的問題。
其一:OGRE與QT存在類型定義的沖突,若干類似unint之類的類型會引起沖突。ogitor的解決方式是當前文件都是用qt名字空間,ogre的標識符都是用OGRE名字空間前綴。當然我也是這樣使用的,不過有些地方不規范的使用了局部名字空間,偷懶嘛。
其二:qt窗口的paint消息會將ogre的繪圖表面覆蓋掉,ogitor使用了2個方法避免,這里單獨提出是不是很懂,也許熟悉了qt框架就知道怎么回事了:
setAttribute(Qt::WA_NoBackground);
setAttribute(Qt::WA_PaintOnScreen);
其三:幀渲染的使用ogitor帶參數了,0.01S,還沒來得及理解
renderOneFrame(0.01f);
其四:不懂timer,為什么啟動不了?看代碼可以發現mainwindows的time回調沒有發生。ogitor調試卻正常的,難道還要對全局timer對象或其他相關對象搞個初始化,類似rand的srand?或者低級錯誤了?望了解qt的指教下。
其五:代碼挺ugly的,看的時候小心,注釋和冗余變量方法都注意跳過。