一、OpenGL渲染管線
1.客戶端-服務器
管線一部分部分是客戶端唱较,另一部分是服務器扎唾。就OpenGL而言,客戶端是存儲在 CPU 存儲器中的南缓,驅動程序將渲染命令與數(shù)據(jù)組合起來發(fā)給服務器GPU執(zhí)行胸遇。
2.數(shù)據(jù)緩存區(qū)buffer
因為從一塊內(nèi)存中將數(shù)據(jù)復制到另一塊內(nèi)存中,傳遞數(shù)據(jù)比較慢汉形,而且在復制數(shù)據(jù)是的時候纸镊,CPU和GPU都不能操作數(shù)據(jù)(以免數(shù)據(jù)錯誤)。所以客戶端不斷的將數(shù)據(jù)和命令組合在一起送入緩沖區(qū)概疆,緩沖區(qū)再發(fā)送到服務器執(zhí)行逗威。
二、管線流程圖
管線中的著色器分為兩類岔冀,一類是可編程管線著色器凯旭,另一類是固定管線著色器
頂點著色器的輸入途徑,attribute,textureData,uniform頂點著色器處理從客戶端輸入的數(shù)據(jù)使套,用數(shù)學運算來計算光照效果罐呼、位移、顏色值等侦高。有幾個頂點嫉柴,頂點著色器就要執(zhí)行幾次。
圖元組合(Primitive Assembly)框圖意在說明3個頂點已經(jīng)組合在了一起
片元著色器:片元著色器來計算像素點的最終顏色
頂點著色(包括細分和幾何著色)決定了一個頂點位置奉呛,而片元著器的信息來決定某個像素點的顏色计螺。
頂點著色器(必要)
細分著色器(可選)
幾何著色器(可選)
片元著色器(必要)
1.單元著色器:繪制默認Open GL坐標下[-1,1]下的圖形瞧壮,圖形中所有的片段都是用同一種顏色填充
GLShaderManager::useStockShader(v1,v2)
v1=GLT_Attribute_VERTEX
v2=GLFloat vColor[4]
參數(shù)1:存儲著色器種類——單元著色器
參數(shù)2:顏色
2.平面著色器:在繪制圖形時登馒,可以應用變換(模型視圖/投影)變化(旋轉,平移馁痴,縮放)平面投影,透視投影肺孤,變換矩陣
GLShaderManager::useStockShader(v1,v2,v3)
v1=GLT_SHADER_FLAT
v2=GLFloat mvp[16]
v3=GLFloat vColor[4]
參數(shù)1:存儲著色器種類-平面著色器
參數(shù)2:允許變化的4 * 4 矩陣(modelViewProjectionMatrix)
參數(shù)3:顏色值
3.上色著色器:在繪制圖形時罗晕,可以應用各種變換济欢,使顏色可以平滑的插入到頂點之間稱為平滑著色
GLShaderManager::useStockShader(v1,v2)
v1=GLT_SHADER_SHADED
v2=GLFloat mvp[16]
參數(shù)1:存儲著色器種類-上色著色器
參數(shù)2:允許變化的4 * 4 矩陣
4.默認光源著色器:在繪制圖形時,可以應用變換小渊,使得繪制的圖形產(chǎn)生陰影和光照效果法褥,這種光源類型類似太陽,平行光
GLShaderManager::useStockShader(v1,v2,v3,v4)
v1=GLT_SHADER_DEFAULT_LIGHT
v2=GLFloat mvMatrix[16]
v3=GLFloat pMatrix[16]
v4=GLFloat[4]
參數(shù)1:存儲著色器種類-默認光源著色器
參數(shù)2:模型4 * 4 矩陣
參數(shù)3:投影4 * 4矩陣
參數(shù)4:顏色(繪制圖形的顏色酬屉,并非光源的顏色)
5.點光源著色器:這種著色器會使繪制的圖形產(chǎn)生陰影和光照效果半等,與默認光源著色器相似,只是光源位置特定
GLShaderManager:useStockShader(v1,v2,v3,v4,v5)
v1=GLT_SHADER_POINT_LIGHT_DIFE
v2=GLFloat mvMatrix[16]
v3=GLFloat pMatrix[16]
v4=GLFloat vLight[3]
v5=GLFloat vColor[4]
參數(shù)1:存儲著色器種類-點光源著色器
參數(shù)2:模型視圖矩陣4 * 4
參數(shù)3:投影矩陣4 * 4
參數(shù)4:點光源的位置
參數(shù)5.漫反射顏色值
6.紋理替換矩陣著色器:通過給定的模型視圖投影矩陣呐萨,使用紋理單元進行顏色填充杀饵,其中每個像素點的顏色是從紋理中獲取。
GLShaderManger::useStockShader(v1,v2,v3)
v1=GLT_SHADER_TEXTURE_REPLACE
v2=GLFloat mvMatrix[16]
v3=GLint nTextureUnit
參數(shù)1:存儲著色器種類-紋理替換矩陣著色器
參數(shù)2:模型4 * 4 矩陣
參數(shù)3:紋理單元
7.紋理調(diào)整著色器:這種著色器通過給定的模型視圖投影矩陣谬擦,將一個基本的顏色乘以一個取自紋理單元nTextureUnit的紋理切距,將顏色與紋理進行顏色混合后才填充到片段中。
GLShaderManager:useStockShader(v1,v2,v3,v4)
v1=GLT_SHADER_TEXTURE_MODULATE
v2=GLFloat mvMatrix
v3=GLFloat vCOlor[4]
v4=GLint nTextureUnit
參數(shù)1:存儲著色器種類-紋理調(diào)整著色器
參數(shù)2:4 * 4 矩陣
參數(shù)3:顏色值
參數(shù)4:紋理單元
8.紋理光源著色器:著色器將一個紋理通過漫反射照明計算進行調(diào)整(叉乘)
GLShaderManger::useStockShader(v1,v2,v3,v4,v5,v6)
v1=GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF
v2=GLFloat mvMatrix[16]
v3=GLFloat pMatrix[16]
v4=GLFloat vLightPoint[3]
v5=GLFloat vBaseColor[4]
v6=GLInt nTextureUnit
參數(shù)1:紋理光源著色器
參數(shù)2:模型4 * 4矩陣
參數(shù)3:投影4 * 4 矩陣
參數(shù)4:點光源位置
參數(shù)5:顏色值
參數(shù)6:紋理單元
1.GL_POINTS 每個頂點在屏幕上都是單獨的點
2.GL_LINES 每對頂點時一個線段
3.GL_LINE_SCRIP 連接成一條線帶
4.GL_LINE_LOOP 連接成一個線圈
5.GL_TRIANGLES 每三個頂點連城一個三角形
6.GL_TRIANGLES_STRIP共用一條帶上的頂點的一組三角形
7.GL_TRIANGLES_FAN 扇形
第一步:
main函數(shù)中調(diào)用setRC()
setRC中的四件事
1.clearColor
2.矩陣
3.cameraFrame觀察者
4.設置頂點
第二步:changeSize
changeSize中的三件事:
1.glViewPort(0,0,w,h)
2.投影矩陣設置
3.模型視圖矩陣設置
第三步:RenderScene
RenderScene中的五件事:
1.clearColor DEPTH STENCIL
2.壓棧modelViewMatrix.PushMatrix(). multMatrix(objFrame).multMatrix(cameraFrame)
3.制造mvp: shaderManager::useStockShader(GLT_SHADER_FLAT,mvp)
4.draw potinBatch.Draw()
5.出棧和交換緩沖區(qū):modelViewMatrix.PopMatrix()
glutSwapBuffers()