Qt新渲染底層Scene Graph研究(一),scenegraph

來源:互聯網
上載者:User

Qt新渲染底層Scene Graph研究(一),scenegraph

Qt新渲染底層Scene Graph研究(一)

       Qt 5提出了一個新的渲染底層,以替代Qt4時期的Graphics View,這個渲染底層就是Scene Graph。其實這個底層的作用和Open Scene Graph是差不多的,但是由於是不同的團隊進行開發的,所以兩者沒有必然的聯絡。Scene Graph主要利用OpenGL ( ES )2的渲染優勢,在2D和3D以非常流暢的速度進行渲染,滿足日益增長的介面效果需求,同時Scene Graph預留了各種各樣的介面,滿足大家定義顯示和渲染效果的需要。

蔣彩陽原創文章,首發地址:http://blog.csdn.net/gamesdev/article/details/43063219。歡迎同行前來探討。

       如果大家使用過Qt 5的Qt Quick模組,你會感覺QtQuick的畫面渲染速度和效率比Qt 4的GraphicsView來說好很多。當然Qt Graphics View在指定OpenGL渲染context為OpenGL時,差距可能小一些,但也較為明顯。這一塊兒,主要在渲染部分精簡了渲染堆棧,並且充分利用顯卡加速,將渲染負擔轉移到GPU來進行,實現了負載平衡。由於Scene Graph是直接構建在OpenGL之上的,因此Scene Graph對於OpenGL開發人員來說要熟悉一些,而從來沒有接觸過OpenGL開發的開發人員就有些為難了,幸好Qt在其之上有QQuickPaintedItem等方便的類,它可以像QPainter那樣對其進行渲染操作。當然源碼對於這一部分的操作是極其複雜的,需要考慮很多情況,幸運的是這一部分運行起來很快,不會佔用很長的渲染時間。而且對於庫的使用者來說,相當輕鬆。

       使用Qt的Scene Graph來開發應用,為了提升效能,要點是批量渲染。這是由OpenGL的特性決定的,因為通過OpenGL,將以往CPU串列的部分並行化,從而大大提升渲染效率,再加上OpenGL本質上是一個巨大的狀態機器,在進行批量渲染的時候,可以有效地減少OpenGL狀態切換所帶來的效能開銷,同時OpenGL預留的一些狀態,需要開發人員有基本的認知,由於OpenGL是一個開放的標準,因此考慮到相容性,其採用了C/S架構。C端即CPU部分,S端對應GPU。在頂點和紋理資料從C端傳入S端之前,會在C端形成一個緩衝區(一說緩衝),我們常說的VBO、FBO和PBO就是這一類緩衝區。正確地設定緩衝區的數量和大小,可以為應用程式的效能提升帶來很大的協助。

       Qt的Scene Graph在Qt 5.1到Qt5.2時有一個質的飛躍,因為其內部採用了新的Scene Graph渲染器。在Qt中,渲染器是可以替換的,所以說Qt 5.1之前採用的渲染器和Qt 5.2採用的渲染器是很不一樣的。Qt官方當時做了一個效能測試,測試表明,OpenGL的API調用次數得到了顯著的降低。其中採用了很多先進的思想比如說紋理圖集(TextureAtlas)。一句話,Scene Graph總體的目標就是批量、批量再批量。

       最後,介紹一下如何使用環境變數來進行對Qt的Scene Graph進行可視化檢測。Qt的Scene Graph通過QSG_VISUALIZE來檢測其渲染。

1、 測試批量渲染

通過指定QSG_VISUALIZE=batches來檢查批量渲染情況,相同顏色標明其作了批量渲染。情境的顏色數越少,批量渲染就越好,渲染的效率就越高。


2、 測試裁剪情況

通過指定QSG_VISUALIZE=clip來檢查裁剪情況。因為Item有一個clip的選項,如果開啟的話,那麼會通過較鮮豔的紅色斜線顯示出來。圖中左上方的映像表示設定了Item::clip = true。

3、 測試全景繪製效果

這是一個非常直觀且非常炫的效果。通過指定QSG_VISUALIZE=overdraw來檢查在三維視圖中各個圖元的顯示情況。所顯示的圖元都集中在x∈[0,Screen.width],y∈[0,Screen.height],z∈[0,1]的立方體中。如果發現自己建立的Item沒有在視口中顯示,看看在這種情況是不是跑到視口外面去了呢。


        所用的程式均來自我製作的全平台獨立遊戲《十日驅鬼記》。下載連結參見:這裡

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.