計算機圖學

Week3
本周老師主要介紹openGL為何物。
openGL是standard graphic APIs。
API的下層是hardware driver,再下層就是hardware(用openGL的情況下多指GPU)。
hardware必須支援API,API的使用需靠hardware運算來實現。driver將API的指令轉換成hardware要做的運算處理。
有時候hardware無法做到或不想做的事,可靠driver來做。也就是用software的方式來做。
例如:經過GPU處理好的資料存回graphic memory,但如果還要做其他處理(如疊字上去),可用driver來做,其實這種用driver來處理的方式,是靠CPU的運算來進行的。

openGL pipeline有兩種,一種是fixed的,另一種是programmable。

fixed pipeline

programmable pipeline,我們可以在vertex processing和fragment processing這兩個階段中加入我們想要的處理(用寫shader code的方式)。

問題:是否只能在vertex processing跟fragment processing的階段加入shader code,還是其他階段也可以呢?因為這張圖中的primitive processing也被圈起來。

我對於pipeline的理解:將要處理的資料(一堆三角形的頂點的座標,因為一個圖形可以用一堆小三角形所組成)輸入到pipeline之中,然後pipeline在vertex processing的階段會先對各個頂點做處理,接著primitive processing將屬於同一個三角形的頂點連起來,最後在fragment processing將三角形內部塗滿想要的顏色(填滿pixel)。做完之後存回memory之中,可以再放到frame buffer中,準備呈現。

OpenGL Shading Language:
剛剛說到programmable pipeline可以在vertex processing跟fragment processing階段加入想要的處理。為此我們需要寫shader code。shader code跑在GPU的shader上面。不同的hardwre公司會提供不同的shader code 編譯器,將shader code編譯成可在shader上執行的機器碼。由於各家公司的產品支持的運算不同,所以各家編譯器產生的機器碼也不同。因此NVidia的編譯器產生的機器碼在AMD的shader上跑可能會沒辦法跑。

問題:編譯器在哪裡呢?是在driver中嗎?
問題:openGL的版本和GLSL版本之間的關係?

OpenGL Useful Library

GLEW:可顯示在目前的平台上(要用哪一顆GPU跑shader)可以用哪些extension。
為什麼要extension?有些hardware公司因為做出來的產品可支援某些強大的功能,但因為目前的standard API(OpenGL)未包含能使用功能的API,因此各家公司會自己寫extension。要使用這些extension 的API,必須先知道所使用的hardware是否支援該extension。

GLM:把model讀進來,並將它parsing成特定的資料結構,這些資料結構對於之後的處理較為方便。

GLUT:用來處理window的資訊。

Framework

Callback Functions用來處理對於一些事件發生後,所要做的動作。(例如按下滑鼠左件要幹嘛、按下某個鍵盤鍵之後要幹嘛。)

還要來寫shader code
寫好的shader code要先compile好,成為object檔(vertex shader和fragment shader都是)。然後再link起想要用的shader object。
這一整個過程就是configure pipeline的過程。(將要使用的pipeline組好)。
我們可以用不只一組的program shader(例如program shader1包含vertex shader2及fragment shader2;program shader2包含vertex shader5及fragment shader4)
問題:此處的program是指甚麼?

Coding注意事項:在vertex shader跟fragment shader compile時,需要自己寫compile的訊息來知道compile是否有過。

Do the exercise!!

留言

熱門文章