开发环境
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的,看的时候小心,注释和冗余变量方法都注意跳过。