OpenGL的渲染架構(gòu)
數(shù)據(jù)傳遞的三種方式
- Attributes :頂點數(shù)據(jù)(x,y,z,w) / 投影矩陣纸兔,模型矩陣/ 紋理坐標(biāo)等
只能傳入頂點著色器涡拘,通過頂點著色器間接傳入片元著色器 - Uniforms :統(tǒng)一批次(變換矩陣,通道氓辣,顏色)夺荒,一次性傳埂息,不經(jīng)常修改
可以直接傳入頂點著色器和片元著色器 - Texture Data :紋理數(shù)據(jù)
可以直接傳入頂點著色器和片元著色器
存儲著色器
- 存儲著色器初始化
GLShaderManager shaderManage;
shaderManager.InitializeStockShaders();
- 單元著色器
使用場景:繪制默認(rèn)OpenGL 坐標(biāo)系(-1,1)下圖形,圖形所有片段都會以一種顏?填充
參數(shù)1:存儲著色器種類 - 單元著色器
參數(shù)2:顏色
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY, GLfloat vColor[4]);
- 平面著色器
使用場景:在繪制圖形時舟扎,可以應(yīng)用變換(模型/投影變化)
參數(shù)1:存儲著色器種類 - 平面著色器
參數(shù)2:允許變化的4*4矩陣
參數(shù)3:顏色
GLShaderManager::UseStockShader(GLT_SHADER_FLAT, GLfloat mvp[16], GLfloat vColor[4]);
- 上色著色器
使用場景:在繪制圖形時分飞,可以應(yīng)用變換(模型/投影變化) ,顏色將會平滑的插入到頂點之間稱為平滑著色睹限。
參數(shù)1 : 存儲著?器種類-默認(rèn)光源著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 投影4*4矩陣
參數(shù)4 : 顏?值
GLShaderManager::UserStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
- 默認(rèn)光源著色器
使用場景:在繪制圖形時, 可以應(yīng)用變換(模型/投影變化)譬猫,這種著色器會使繪制的圖形產(chǎn)生陰影和光照的效果.
參數(shù)1: 存儲著?器種類-默認(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]);
- 點光源著色器
使用場景:繪制圖形時讯檐,可以應(yīng)用變換(模型/投影變化),這種著色器會使繪制的圖形產(chǎn)生陰影和光照的效果染服,他與默認(rèn)光源著色器非常類似别洪,區(qū)別只是光源的位置可能是固定的。
參數(shù)1 : 存儲著?器種類-點光源著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 投影4*4矩陣
參數(shù)4 : 點光源的位置
參數(shù)5 : 顏?值
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvMatrix[16], GLint nTextureUnit);
- 紋理替換矩陣著色器
使用場景:繪制圖形時柳刮,可以應(yīng)用變換(模型/投影變化)挖垛,這種著色器通過給定的模型視圖投影矩陣,使用紋理單元來進(jìn)行顏色填充秉颗。其中每個像素點的顏色是從紋理中獲取痢毒。
參數(shù)1 : 存儲著?器種類-紋理替換矩陣著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 紋理單元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvMatrix[16], GLint nTextureUnit);
- 紋理調(diào)整著色器
使用場景 : 繪制圖形時,可以應(yīng)用變換(模型/投影變化)這種著色器通過給定的模型視圖投影矩陣蚕甥。著色器將一個基本色乘以一個取自紋理單元nTextureUnit的紋理哪替。將顏色與紋理進(jìn)行混合后才填充到片段中。
參數(shù)1 : 存儲著?器種類-紋理調(diào)整著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 顏?值
參數(shù)4 : 紋理單元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfloat mvMatrix[16], GLfloat vColor[4], GLint nTextureUnit);
- 紋理光源著色器
使用場景 : 繪制圖形時梢灭,可以應(yīng)用變換(模型/投影變化)夷家。這種著色器通過給定的模型視圖投影矩陣。著色器講一個紋理通過漫反射照明計算進(jìn)行調(diào)整(相乘)敏释。
參數(shù)1 : 存儲著?器種類-紋理光源著?器
參數(shù)2 : 模型4*4矩陣
參數(shù)3 : 投影4*4矩陣
參數(shù)4 : 點光源位置
參數(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三角形帶
對于很多表面或者形狀?言库快,我們會需要繪制?個相連的三角形。我們可以使用GL_TRIANGLES_STRIP圖元繪制?串相連三角形钥顽,從而節(jié)省?量的時間义屏。
優(yōu)點
- 用前3個頂點指定第1個三角形之后,接下來的每?個三?形蜂大,只需要再指定1個頂點闽铐。需要繪制?量的三?形時,采?這種?法可以節(jié)省?大量的程序代碼和數(shù)據(jù)存儲空間奶浦。
- 提供運(yùn)算性能和節(jié)省帶寬兄墅。更少的頂點意味著數(shù)據(jù)從內(nèi)存?zhèn)鬏數(shù)綀D形卡的速度更快,并且頂點著?器需要處理的次數(shù)也更少澳叉。