OpenGL的概念很難用一篇文章寫完,所以接下來將以筆者寫好的庫做為範例,大致講解下如何利用已經寫好的shader的class來實作自己專案中的shader。
本次將使用pygame作為操作的語言,還有ModernGL作為輔助的模塊。
首先,為什麼需要shader?Pygame本身是利用sdl2進行圖形上的製圖,是採取CPU來運算遊戲和圖片的繪製。如果項目很小,那FPS還能保持穩定;但今天如果項目變得巨大:如要繪製過多的圖形和許多大像素的圖形繪製,那sdl2本身就無法穩定的進行運算,FPS也會大幅下降。今天如果想利用GPU來輔助,拋開放棄pygame的選項,我們可以引入OpenGL的模塊進行輔助。但OpenGL的語法上很難讓入門的新手快速弄懂。所以採取更簡單的ModernGL,即便如此,此篇文章仍不夠寫完具體的實現方式。只能將已經完成的Class分享給各位,以比較簡單的方式體驗,並理解shader的渲染流程。
以下將快速的講解各個需要的步驟:
- 將你原本用於display的變量以Surface的方式重新宣告,並取消對display的變量宣告。之後要繪製的圖形就全部渲染到這張Surface上。以下將簡稱這個Surface為Screen。screen = pygame.Surface(size)
- 在display裡設置為OPENGL和DOUBLEBUF的模式,以便讓OpenGL渲染。pygame.display.set_mode(size, DOUBLEBUF|OPENGL)
- 導入上面提供的Shader的Class,並自行實例化。之後要用這個實例化的物件渲染。
- 將原本畫面更新的部分,全部更改成以shader的物件render。有獨立的func,也設置了__call__的指令。可以直接呼叫物件渲染。
以上便是將此class導入並實用的方法。可以自己去下載玩玩看。之後會更新以pyOpenGL編寫的Class。