" />
這是QtOpenGL以及Graphics-View框架整合的例子下載,框架由Scene Item 和View組成,場景管理所有的Item,View用來展示。詳細的介紹請看Qt自帶的幫助文檔。為了學習這個框架,博主決定自己寫個坦克大戰(zhàn)試試。首先我們來完成坦克的移動。
Qt中有一個非常炫的例子:Boxes,它展示了Qt能夠讓其Graphics–View框架和Qt的OpenGL模塊結合起來,渲染出非常出色的效果。其實我私自認為憑這個程序,已經有很多游戲開發(fā)者關注Qt了,因為游戲開發(fā)一個非常常見的模塊就是UI,一般情況下游戲引擎提供的UI模塊比較弱,基本上都是游戲引擎+第三方GUI庫進行結合的。但是Qt以其Graphics–View框架能夠非常輕松地將UI控件嵌入場景中,而且能夠和OpenGL底層共存,更重要的是,憑借著Qt的qss,Qt可以定制許多GUI元素,這是非常具有吸引力的。所以說,如果大家對游戲開發(fā)感興趣,那么不妨看一下Qt。
首先在我們創(chuàng)建了一個QWidget,然后調用makeCurrent()成員函數,其實意思是讓它的rendercontext設為當前的rendercontext。隨后建立的是OpenGLView,這個OpenGLView是來自于QGraphicsView的,它的初始化和其祖先的并無二致,隨后一句非常重要:setViewport(),它的作用是將QGLWidget設置為OpenGLView的viewport,這樣的話背景的rendercontext不再是rastercontext而是OpenGLcontext了,否則場景的背景還是需要用CPU渲染的,效率低下。接著是兩段建立連接的代碼。最后設置的是窗口大小和標題什么的,一開始還是非常簡單的。
Qt的QWidget大家族已經成熟,不會得到太大的發(fā)展了,而隨著Qt5的發(fā)展,新的界面類會嶄露頭角,比如QWindow、QSurface、QScreen這些類。但現在的狀況(Qt5.2即將出了),這些類和模塊并不會對現有的GUI模塊造成威脅,更不用說取代Qt4的GUI(在Qt5是QtGui和QtWidgets)模塊了。自Qt4.4起,Qt擁有了Graphics-View框架,使用這個框架可以更加輕松地在窗口中嵌入任意你想要繪制的元素。但是據我所知,Qt5的那些類無法和Graphics-View框架進行整合,對于想要利用Qt中Graphics-View框架的同行們,只能退回Qt4的類進行開發(fā)了,Qt5的這些類對于創(chuàng)建純OpenGL還是有利的。