OpenGL實例教程04:著色器
什么是著色器?
著色器(Shader)是用來實現(xiàn)圖像渲染的,用來替代固定渲染管線的可編輯程序。

頂點處理器:負責(zé)(對通過流水線的每個頂點)執(zhí)行頂點著色器。頂點的數(shù)量由調(diào)用draw時的參數(shù)決定。頂點著色器不知道被渲染基元的拓撲結(jié)構(gòu)。此外,不能在頂點處理器中丟棄頂點。每個頂點只進入頂點處理器一次,經(jīng)過變換后繼續(xù)向下傳遞。
幾何處理器:即幾何圖形處理器,負責(zé)執(zhí)行幾何著色器,輸入是一個圖元的一組頂點。幾何著色器可以改變圖形的拓撲結(jié)構(gòu),即就是將一個圖元變換為另一個完全不同的圖元(例如:改變頂點數(shù)量),或者修改圖元的位置。
裁剪器:它將圖元剪切到標準化框(-1,1之間的立方體)中。它還將它們剪切到近Z和遠Z面(離“攝像頭”太近,或太遠的地方)。還支持自定義裁剪面。
光柵器:在裁剪器中幸存的頂點將映射到屏幕空間坐標。光柵化器根據(jù)它們的拓撲將它們渲染到屏幕上。例如,對于三角形來說,這意味著找出所有在三角形內(nèi)的像素。對于每個三角形內(nèi)的像素,光柵化器調(diào)用片段處理器(負責(zé)執(zhí)行片段著色器)。在這里,你可以選擇通過從紋理中采樣或使用任何你想要的技術(shù)來確定像素的顏色。
C++ 源碼中的著色器管理(OpenGL API調(diào)用)
著色器與C/?C++程序非常相似,生成一個在GPU上運行的著色器程序,就是創(chuàng)建一條虛擬的流水線:
首先,編寫著色器文本,并在程序中使用它(將文本包含在源代碼本身的字符數(shù)組中,或者通過外部文本文件加載到字符數(shù)組中)。
然后一個接一個地將著色器編譯成著色器對象。
之后,將這些著色器鏈對象接到單個程序中,并將其加載到GPU中。
著色器源碼
著色器的編寫采用的是GLSL(GL Shading Language),類似C語言。生成的程序?qū)⒃趫D形卡的GPU (Graphic Processor Unit圖形處理單元)上執(zhí)行。
頂點著色器
頂點著色器是流水線上的第一道工序,主要負責(zé)導(dǎo)入并處理頂點數(shù)據(jù)。
片段著色器
片段著色器的工作是確定片段(像素)的顏色。
C++ 代碼展示:
運行效果:
