OpenGL 固定管線/存儲(chǔ)著色器

管線:

在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):

  1. 單元著色器
  2. 平面著色器
  3. 上色著色器
  4. 默認(rèn)光源著色器
  5. 點(diǎn)光源著色器
  6. 紋理替換矩陣
  7. 紋理調(diào)整著色器
  8. 紋理光源著色器

存儲(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 紋理單元
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容