管線:
在OpenGL 下渲染圖形,就會(huì)有經(jīng)歷一個(gè)一個(gè)節(jié)點(diǎn).?這樣的操作可以理解為管線.大家可以想象成流?線.每個(gè)任務(wù)類(lèi)似流?線般執(zhí)行.任務(wù)之間有先后順序. 管線是?個(gè)抽象的概念,之所以稱(chēng)之為管線是因?yàn)轱@卡在處理數(shù)據(jù)的時(shí)候是按照?個(gè)固定的順序來(lái)的,?且嚴(yán)格按照這個(gè)順序。就像?從?根管子的一端流到另一端,這個(gè)順序是不能打破的.
固定管線/存儲(chǔ)著色?:
- 在早期的OpenGL版本,它封裝了很多種著色?程序塊內(nèi)置的一段包含了光 照、坐標(biāo)變換、裁剪等諸多功能的固定shader程序來(lái)完成,來(lái)幫助開(kāi)發(fā)者來(lái)完成圖形的渲染. 而開(kāi)發(fā)者只需要傳入相應(yīng)的參數(shù),就能快速完成圖形的渲染. 類(lèi)似于iOS開(kāi)發(fā)會(huì)封裝很多API,?我們只需要調(diào)用,就可以實(shí)現(xiàn)功能.不需要關(guān)注底層實(shí)現(xiàn)原理
- 但是由于OpenGL的使?場(chǎng)景?常豐富,固定管線或存儲(chǔ)著?色??法完成每?個(gè)業(yè)務(wù).這時(shí)將相關(guān)部分開(kāi)放成可編程.
使用存儲(chǔ)著色器最方便之處是,你不要考慮到渲染中到底是頂點(diǎn)著色器還是片元著色器.所以你在使用存儲(chǔ)著色器時(shí),不需要思考傳遞數(shù)據(jù)時(shí),該有那種方式傳送.你只需要傳遞不同存儲(chǔ)器所需要的數(shù)據(jù)到參數(shù)列表就可以了. 至于它的底層是如何實(shí)現(xiàn)的,并不需要關(guān)心.因?yàn)檫@一切它已經(jīng)封裝起來(lái)了.
存儲(chǔ)著色器的分類(lèi):
- 單元著色器
- 平面著色器
- 上色著色器
- 默認(rèn)光源著色器
- 點(diǎn)光源著色器
- 紋理替換矩陣
- 紋理調(diào)整著色器
- 紋理光源著色器
存儲(chǔ)著色器使用介紹:
GLShaderManager中的函數(shù)UseStockShader會(huì)選擇一個(gè)存儲(chǔ)著色器并提供這個(gè)著色器的Uniform值,該函數(shù)完成的東西就是對(duì)我們的頂點(diǎn)數(shù)據(jù)進(jìn)一步的加工,比如設(shè)置頂點(diǎn)顏色,設(shè)置頂點(diǎn)光照的強(qiáng)度,設(shè)置頂點(diǎn)紋理等。
- 初始化
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders()
- 1. 單元著色器
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);
使?場(chǎng)景: 繪制默認(rèn)OpenGL坐標(biāo)系(-1,1)下圖形. 圖形所有?段都會(huì)以?種顏色填充
| 參數(shù) | 描述 |
|---|---|
| 1. GLT_SHADER_IDENTITY | 存儲(chǔ)著色?種類(lèi)-單元著色? |
| 2. vColor[4] | 顏色 |
- 2. 平面著色器
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
使?場(chǎng)景: 在繪制圖形時(shí), 可以應(yīng)?變換(模型/投影變化).
| 參數(shù) | 描述 |
|---|---|
| 1. GLT_SHADER_FLAT | 存儲(chǔ)著色?種類(lèi)-平面著色? |
| 2. mvp[16] | 允許變化的4*4矩陣 |
| 3. vColor[4] | 顏色 |
- 3. 上色著色器
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);
使?場(chǎng)景: 在繪制圖形時(shí), 可以應(yīng)?變換(模型/投影變化)顏色將會(huì)平滑地插?到頂點(diǎn)之間稱(chēng)為平滑著色.
| 參數(shù) | 描述 |
|---|---|
| 1. GLT_SHADER_SHADED | 存儲(chǔ)著色?種類(lèi)-上色著色器 |
| 2. mvp[16] | 允許變化的4*4矩陣 |
- 4. 默認(rèn)光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
使?場(chǎng)景: 在繪制圖形時(shí), 可以應(yīng)用變換(模型/投影變化)這種著色?會(huì)使繪制的圖形產(chǎn)生陰影和光照的效果.
| 參數(shù) | 描述 |
|---|---|
| 1. GLT_SHADER_DEFAULT_LIGHT | 存儲(chǔ)著色?種類(lèi)-默認(rèn)光源著色器 |
| 2. mvMatrix[16] | 模型4*4矩陣 |
| 3. pMatrix[16] | 投影4*4矩陣 |
| 4. vColor[4] | 顏色 |
- 5. 點(diǎn)光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
使?場(chǎng)景: 在繪制圖形時(shí), 可以應(yīng)用變換(模型/投影變化)這種著色?會(huì)使繪制的圖形產(chǎn)?陰影和光照的效果.它與默認(rèn)光源著色器非常類(lèi)似,區(qū)別只是光源位置可能是特定的.
| 參數(shù) | 描述 |
|---|---|
| 1. GLT_SHADER_POINT_LIGHT_DIEF | 存儲(chǔ)著色?種類(lèi)-點(diǎn)光源著色器 |
| 2. mvMatrix[16] | 模型4*4矩陣 |
| 3. pMatrix[16] | 投影4*4矩陣 |
| 4. vLightPos[4] | 點(diǎn)光源的位置 |
| 5. vColor[4] | 漫反射顏色值(光源顏色) |
- 6. 紋理替換矩陣著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
使?場(chǎng)景: 在繪制圖形時(shí), 可以應(yīng)用變換(模型/投影變化)這種著色?通過(guò)給定的模型視圖投影矩陣.使?紋理單元來(lái)進(jìn)行顏色填充.其中每個(gè)像素點(diǎn)的顏?是從紋理中獲取.
| 參數(shù) | 描述 |
|---|---|
| 1. GLT_SHADER_TEXTURE_REPLACE | 存儲(chǔ)著色?種類(lèi)-紋理替換矩陣著色器 |
| 2. mvMatrix[16] | 模型4*4矩陣 |
| 3. nTextureUnit | 紋理單元 |
- 7. 紋理調(diào)整著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);
使?場(chǎng)景: 在繪制圖形時(shí), 可以應(yīng)用變換(模型/投影變化)這種著色?通過(guò)給定的模型視圖投影矩陣. 著色?將一個(gè)基本?乘以一個(gè)取?紋理單元nTextureUnit的紋理.將顏色與紋理進(jìn)行顏?混合后才填充到?段中.
| 參數(shù) | 描述 |
|---|---|
| 1. GLT_SHADER_TEXTURE_MODULATE | 存儲(chǔ)著色?種類(lèi)-紋理替換矩陣著色器 |
| 2. mvMatrix[16] | 模型4*4矩陣 |
| 3. vColor[4] | 顏色 |
| 4. nTextureUnit | 紋理單元 |
- 8. 紋理光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,G Lfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
使?場(chǎng)景: 在繪制圖形時(shí), 可以應(yīng)用變換(模型/投影變化)*這種著色?通過(guò)給定的模型視圖投影矩陣. 著色?將?個(gè)紋理通過(guò)漫反射照明計(jì)算進(jìn)行調(diào)整(相乘).
| 參數(shù) | 描述 |
|---|---|
| 1. GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF | 存儲(chǔ)著色?種類(lèi)-紋理光源著色器 |
| 2. mvMatrix[16] | 模型4*4矩陣 |
| 3. pMatrix[16] | 投影4*4矩陣 |
| 4. vLightPos[4] | 點(diǎn)光源的位置 |
| 5. vBaseColor[4] | 顏色值(?何圖形的基本色) |
| 6. nTextureUnit | 紋理單元 |