前往
大廳
主題

Pygame的Shader實作Crt濾鏡-使用ModernGL\OpenGL

金戈 | 2022-07-31 20:02:50 | 巴幣 1000 | 人氣 349

OpenGL的概念很難用一篇文章寫完,所以接下來將以筆者寫好的庫做為範例,大致講解下如何利用已經寫好的shader的class來實作自己專案中的shader。


本次將使用pygame作為操作的語言,還有ModernGL作為輔助的模塊。

首先,為什麼需要shader?Pygame本身是利用sdl2進行圖形上的製圖,是採取CPU來運算遊戲和圖片的繪製。如果項目很小,那FPS還能保持穩定;但今天如果項目變得巨大:如要繪製過多的圖形和許多大像素的圖形繪製,那sdl2本身就無法穩定的進行運算,FPS也會大幅下降。今天如果想利用GPU來輔助,拋開放棄pygame的選項,我們可以引入OpenGL的模塊進行輔助。但OpenGL的語法上很難讓入門的新手快速弄懂。所以採取更簡單的ModernGL,即便如此,此篇文章仍不夠寫完具體的實現方式。只能將已經完成的Class分享給各位,以比較簡單的方式體驗,並理解shader的渲染流程。

以下將快速的講解各個需要的步驟:
  1. 將你原本用於display的變量以Surface的方式重新宣告,並取消對display的變量宣告。之後要繪製的圖形就全部渲染到這張Surface上。以下將簡稱這個Surface為Screen。screen = pygame.Surface(size)
  2. 在display裡設置為OPENGL和DOUBLEBUF的模式,以便讓OpenGL渲染。pygame.display.set_mode(size, DOUBLEBUF|OPENGL)
  3. 導入上面提供的Shader的Class,並自行實例化。之後要用這個實例化的物件渲染。
  4. 將原本畫面更新的部分,全部更改成以shader的物件render。有獨立的func,也設置了__call__的指令。可以直接呼叫物件渲染。
以上便是將此class導入並實用的方法。可以自己去下載玩玩看。之後會更新以pyOpenGL編寫的Class。

創作回應

相關創作

更多創作