OpenGL入門第二課 常用的固定儲存著色器

2021-09-24 08:19:34 字數 2850 閱讀 2943

在說儲存著色器的種類之前,我們先來大致看一下opengl的基本渲染架構,這樣有助於我們對整個渲染流程的理解。

圖:opengl 渲染架構圖)

從上圖中我們可以看出整個管線分為2個部分,客戶端(client)和服務端(server)。

客戶端就是我們編寫的程式**以及opengl api,這部分**執行在cpu上。

服務端是寫在裝置底層硬體裡面的,是真正完成渲染操作的 ,它執行在gpu上,從圖中可以看出,服務端主要包括頂點著色器(vertex shader)和 片元著色器(fragment shader)。首先由頂點著⾊器對傳⼊的頂點資料進⾏運算。再通過圖元裝配,將頂點轉換為圖元。然後進⾏光柵化,將圖元這種⽮量圖形,轉換為柵格化資料。最後,將柵格化資料傳入⽚元著⾊器中進⾏運算。⽚元著⾊器會對柵格化資料中的每⼀個畫素進⾏運算,並決定畫素的顏⾊和深度值。 

客戶端不斷的把資料塊和命令塊組合在一起輸送到緩衝區,然後緩衝區就會傳送到伺服器執行,如果伺服器停止工作等待客戶端,或者客戶端停止工作來等待伺服器做好接受更多的命令和資料的準備,我們把這種情況陳為管線停滯

客戶端和服務端的通訊只能只能通過attributes屬性,uniforms和texture data 紋理資料這三種資料型別。而且值得注意的是attributes 屬性只能傳給vertex shader 頂點著色。

固定儲存著色器就是早期的opengl版本封裝的幫助開發者完成圖形渲染的程式塊,我們常用的有一下幾種:

使用場景:繪製預設opengl 座標系(-1,1)下圖形. 圖形所有片段都會以⼀種顏色填充。

glshadermanager::usestockshader(glt_shader_identity,glfloat vcolor[4])

引數1: 儲存著⾊器種類-單元著⾊器;  引數2: 顏⾊ 

使用場景:在繪製圖形時, 可以應⽤變換(模型/投影變換). 

glshadermanager::usestockshader(glt_shader_flat,glfloat mvp[16],glfloat vcolor[4])

引數1: 儲存著⾊器種類-平面著⾊器;引數2:允許變化的4*4矩陣;引數3: 顏⾊

使⽤用場景: 在繪製圖形時, 可以應用變換(模型/投影變換) ,顏⾊將會平滑地插入到頂點之間 稱為平滑著色. 

glshadermanager::usestockshader(glt_shader_shader,mvp[16])

引數1: 儲存著⾊器種類-平面著⾊器;引數2:允許變化的4*4矩陣

使用場景:在繪製圖形時, 可以應用變換(模型/投影變換),並且這種著⾊器會使繪製的圖形產⽣陰影和光照的效果.  

glshadermanager::usestockshader(glt_shader_default_light,glfloat mvmatrix[16], glfloat pmatrix[16], glfloat vcolor[4])

引數1: 儲存著⾊器種類-預設光源著⾊器 ;引數2: 模型檢視4*4矩陣;引數3: 投影4*4矩陣;引數4: 顏⾊值      

使⽤場景: 在繪製圖形時, 可以應⽤變換(模型/投影變換) ,並且這種著⾊器會使繪製的圖形產⽣陰影和光照的效果.它與預設光源著⾊器⾮常類似,區別只是光源位置可能是特定的. 

glshadermanager::usestockshader(glt_shader_point_light_dief,glfloat mvmatrix[16], glfloat pmatrix[16],glfloat vlightpos[3], glfloat vcolor[4])

引數1: 儲存著⾊器種類-點光源著⾊器 ;引數2: 模型檢視4*4矩陣;引數3: 投影4*4矩陣;引數4:點光源位置;引數5: 顏⾊值

使⽤場景: 在繪製圖形時, 可以應用變換(模型/投影變換),這種著⾊器通過給定的模型檢視投影矩陣.使用紋理單元來進⾏顏⾊填充.其中每個畫素點的顏⾊都是從紋理中獲取.

glshadermanager::usestockshader(glt_shader_texture_replace,glfloat mvmatrix[16],glint ntextureunit)

引數1: 儲存著⾊器種類-紋理替換矩陣著色器 ;引數2: 模型檢視4*4矩陣;引數3:紋理單元;

使⽤場景: 在繪製圖形時, 可以應用變換(模型/投影變換),這種著⾊器通過給定的模型檢視矩陣. 著⾊器將乙個基本色乘以乙個取自紋理單元ntextureunit 的紋理.將顏色與紋理進行顏色混合後才填充到片段中.

glshadermanager::userstockshader(glt_shader_texture_modulate,glfloat mvmatrix[16],glfloat vcolor[4],glint ntextureunit);

引數1: 儲存著⾊器種類-紋理調整著色器;引數2: 模型檢視4*4矩陣;引數3:顏色;引數4:紋理單元;

使⽤場景: 在繪製圖形時, 可以應⽤變換(模型/投影變換)。這種著色器通過給定的模型檢視投影矩陣. 著⾊器將⼀個紋理通過漫反射照明計算進⾏調整(相乘).

glshadermanager::userstockshader(glt_shader_texture_point_light_dief,glfloat mvmatrix[16],glfloat pmatrix[16],glfloat vlightpos[3],glfloat vbasecolor[4],glint ntextureunit);

引數1: 儲存著色器種類-紋理光源著色器;引數2: 模型檢視4*4矩陣;引數3: 投影4*4矩陣;引數4: 點光源位置;引數5: 顏⾊值(⼏何圖形的基本色) ;引數6: 紋理理單元 

python入門 第二課

一 傳遞引數與引數型別 傳遞引數就是對已經定義的函式中的引數賦予一定的值來實現對函式的呼叫。我們先定義乙個函式,以梯形的面積函式舉例 def tixing base up,base down,height return 1 2 base up base down height接下來開始呼叫函式 ti...

Python3爬蟲入門第二課

前面用的一直是python內建的urllib庫進行爬蟲實驗,後面發現原來用第三方庫requests更佳 下面這個是對糗事百科的段子爬取,更加規範,符合物件導向,而且特別是requests用起來更方便 在windows系統下只需要在命令列輸入命令 pip install requests 即可安裝。c...

winform入門第二課 通訊介面設定

通訊介面的設計,485通訊需要有檢驗位,停止位,資料位,波特率四個引數設定,以及有關於電腦的串口號選擇。設計乙個大概的介面,這些中文都可以右擊屬性,名字直接改就好了。我們可以對這些選擇新增選擇專案,並通過索引賦予其初始選擇的項,例如波特率有1200,2400,4800,9600,通過this.com...