OpenGL的渲染架構(gòu)

OpenGL渲染架構(gòu).png
數(shù)據(jù)傳遞的三種方式
- Attributes :頂點(diǎn)數(shù)據(jù)(x,y,z,w) / 投影矩陣,模型矩陣/ 紋理坐標(biāo)等
只能傳入頂點(diǎn)著色器,通過頂點(diǎn)著色器間接傳入片元著色器 - Uniforms :統(tǒng)一批次(變換矩陣,通道,顏色),一次性傳,不經(jīng)常修改
可以直接傳入頂點(diǎn)著色器和片元著色器 - Texture Data :紋理數(shù)據(jù)
可以直接傳入頂點(diǎn)著色器和片元著色器
存儲(chǔ)著色器
- 存儲(chǔ)著色器初始化
GLShaderManager shaderManage;
shaderManager.InitializeStockShaders();
- 單元著色器
使用場(chǎng)景:繪制默認(rèn)OpenGL 坐標(biāo)系(-1,1)下圖形,圖形所有片段都會(huì)以一種顏?填充
參數(shù)1:存儲(chǔ)著色器種類 - 單元著色器
參數(shù)2:顏色
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY, GLfloat vColor[4]);
- 平面著色器
使用場(chǎng)景:在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化)
參數(shù)1:存儲(chǔ)著色器種類 - 平面著色器
參數(shù)2:允許變化的4*4矩陣
參數(shù)3:顏色
GLShaderManager::UseStockShader(GLT_SHADER_FLAT, GLfloat mvp[16], GLfloat vColor[4]);
- 上色著色器
使用場(chǎng)景:在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化) ,顏色將會(huì)平滑的插入到頂點(diǎn)之間稱為平滑著色。
參數(shù)1 : 存儲(chǔ)著?器種類-默認(rèn)光源著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 投影4*4矩陣
參數(shù)4 : 顏?值
GLShaderManager::UserStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
- 默認(rèn)光源著色器
使用場(chǎng)景:在繪制圖形時(shí), 可以應(yīng)用變換(模型/投影變化),這種著色器會(huì)使繪制的圖形產(chǎn)生陰影和光照的效果.
參數(shù)1: 存儲(chǔ)著?器種類-默認(rèn)光源著色器
參數(shù)2: 模型4*4矩陣
參數(shù)3: 投影4*4矩陣
參數(shù)4: 顏?色值
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vColor[4]);
- 點(diǎn)光源著色器
使用場(chǎng)景:繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化),這種著色器會(huì)使繪制的圖形產(chǎn)生陰影和光照的效果,他與默認(rèn)光源著色器非常類似,區(qū)別只是光源的位置可能是固定的。
參數(shù)1 : 存儲(chǔ)著?器種類-點(diǎn)光源著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 投影4*4矩陣
參數(shù)4 : 點(diǎn)光源的位置
參數(shù)5 : 顏?值
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvMatrix[16], GLint nTextureUnit);
- 紋理替換矩陣著色器
使用場(chǎng)景:繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化),這種著色器通過給定的模型視圖投影矩陣,使用紋理單元來進(jìn)行顏色填充。其中每個(gè)像素點(diǎn)的顏色是從紋理中獲取。
參數(shù)1 : 存儲(chǔ)著?器種類-紋理替換矩陣著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 紋理單元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvMatrix[16], GLint nTextureUnit);
- 紋理調(diào)整著色器
使用場(chǎng)景 : 繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化)這種著色器通過給定的模型視圖投影矩陣。著色器將一個(gè)基本色乘以一個(gè)取自紋理單元nTextureUnit的紋理。將顏色與紋理進(jìn)行混合后才填充到片段中。
參數(shù)1 : 存儲(chǔ)著?器種類-紋理調(diào)整著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 顏?值
參數(shù)4 : 紋理單元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfloat mvMatrix[16], GLfloat vColor[4], GLint nTextureUnit);
- 紋理光源著色器
使用場(chǎng)景 : 繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化)。這種著色器通過給定的模型視圖投影矩陣。著色器講一個(gè)紋理通過漫反射照明計(jì)算進(jìn)行調(diào)整(相乘)。
參數(shù)1 : 存儲(chǔ)著?器種類-紋理光源著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 投影4*4矩陣
參數(shù)4 : 點(diǎn)光源位置
參數(shù)5 : 顏?值
參數(shù)6 : 紋理單元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vBaseColor[4], GLint nTextureUnit);
OpenGL基本圖元

圖元

OpenGL三角形帶
對(duì)于很多表面或者形狀?言,我們會(huì)需要繪制?個(gè)相連的三角形。我們可以使用GL_TRIANGLES_STRIP圖元繪制?串相連三角形,從而節(jié)省?量的時(shí)間。
優(yōu)點(diǎn)
- 用前3個(gè)頂點(diǎn)指定第1個(gè)三角形之后,接下來的每?個(gè)三?形,只需要再指定1個(gè)頂點(diǎn)。需要繪制?量的三?形時(shí),采?這種?法可以節(jié)省?大量的程序代碼和數(shù)據(jù)存儲(chǔ)空間。
- 提供運(yùn)算性能和節(jié)省帶寬。更少的頂點(diǎn)意味著數(shù)據(jù)從內(nèi)存?zhèn)鬏數(shù)綀D形卡的速度更快,并且頂點(diǎn)著?器需要處理的次數(shù)也更少。