1.渲染流程

渲染流程:
- 設(shè)置頂點(diǎn)數(shù)據(jù)
- 頂點(diǎn)著色器中接收頂點(diǎn)數(shù)據(jù)單獨(dú)處理每個(gè)頂點(diǎn)
- 細(xì)分著色器,在管線中生成新的幾何模型
- 幾何著色器不能自定義,略過(guò)
- 圖元設(shè)置,根據(jù)頂點(diǎn)確定點(diǎn),線,三角形
- 裁減掉超出顯示范圍部分
- 光柵化,將圖元格柵化為一個(gè)個(gè)像素點(diǎn)以及對(duì)應(yīng)像素點(diǎn)的顏色
- 給范圍內(nèi)著色
- 渲染
OpenGL渲染管線簡(jiǎn)化流程圖:

Attribute 屬性
屬性就是一個(gè)對(duì)每個(gè)頂點(diǎn)都要作改變的數(shù)據(jù)元素, 可以直接傳到頂點(diǎn)著色器中,但是不能直接傳入片元著色器中,但是可以通過(guò)自定義的GLSL代碼間接傳遞.
其值可以是浮點(diǎn)數(shù),整數(shù)或者布爾數(shù)據(jù)
包括:
- 頂點(diǎn)數(shù)據(jù)
- 紋理坐標(biāo)
- 顏色值
- 用于光照計(jì)算的表面法線
Uniform 值
是一個(gè)比較統(tǒng)一的,不會(huì)經(jīng)常發(fā)生改變,比如旋轉(zhuǎn)矩陣,這個(gè)時(shí)候就可以通過(guò)Uniform值傳進(jìn)來(lái),可以直接傳到頂點(diǎn)著色器和片元著色器中
正投影(Orthographic Projection)或平行投影
物體在屏幕上的大小和實(shí)際大小相同,不管是遠(yuǎn)還是近。如果指定了視景體之外的圖形將會(huì)被裁剪,可以通過(guò)GLFrustum方法完成上述工作
GLfrustum::GLFrustum(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin, GLfloat zMax)
透視投影(Perspective Projection)
遠(yuǎn)處的物體看上去比近處的物體更小一些,在模擬和3D動(dòng)畫(huà)中,這種投影能夠獲得最大程度的逼真感。
//fFov 垂直方向上的角度
//fAspect 窗口的寬高的縱橫比
//fNear 到近裁剪面的距離
//fFar 到遠(yuǎn)裁剪面的距離
GLFrustum::SetPerspective(<#float fFov#>, <#float fAspect#>, <#float fNear#>, <#float fFar#>)


存儲(chǔ)著色器
存儲(chǔ)著色器是由GLShaderManager來(lái)進(jìn)行管理的,試用前必須要先初始化
// GLShaderManager 的初始化
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();
單元著色器
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);
參數(shù)1: 存儲(chǔ)著色器種類
參數(shù)2: 顏色
試用場(chǎng)景: 繪制默認(rèn)OpenGL坐標(biāo)系(-1,1)下圖形,圖形所有片段都以同一種顏色填充
平面著色器
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
參數(shù)1: 存儲(chǔ)著色器種類
參數(shù)2:允許變化的4*4矩陣
參數(shù)3 : 顏色
試用場(chǎng)景: 在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化)
上色著色器
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);
參數(shù)1: 存儲(chǔ)著色器種類
參數(shù)2:允許變化的4*4矩陣
試用場(chǎng)景: 在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化),顏色將會(huì)平滑的插入到頂點(diǎn)之間稱為平滑著色
默認(rèn)光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
參數(shù)1: 存儲(chǔ)著色器種類
參數(shù)2:模型44矩陣
參數(shù)3: 投影44矩陣
參數(shù)4: 顏色
試用場(chǎng)景: 在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化),這種著色器會(huì)使繪制的圖形產(chǎn)生陰影和光照效果
點(diǎn)光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
參數(shù)1: 存儲(chǔ)著色器種類
參數(shù)2:模型44矩陣
參數(shù)3: 投影44矩陣
參數(shù)4: 點(diǎn)光源位置
參數(shù)5: 漫反射顏色值
試用場(chǎng)景: 在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化),這種著色器會(huì)使繪制的圖形產(chǎn)生陰影和光照效果,他與默認(rèn)光源著色器非常類似,區(qū)別只是在光源位置可以是特定的
紋理替換著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
參數(shù)1: 存儲(chǔ)著色器種類
參數(shù)2:模型4*4矩陣
參數(shù)3: 紋理單元
試用場(chǎng)景: 在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化),這種著色器通過(guò)給定的模型視圖投影矩陣,試用紋理單元來(lái)進(jìn)行顏色填充,其中每個(gè)像素點(diǎn)的顏色是從紋理中獲取
紋理調(diào)整著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);
參數(shù)1: 存儲(chǔ)著色器種類
參數(shù)2:模型4*4矩陣
參數(shù)3: 顏色值
參數(shù)4: 紋理單元
試用場(chǎng)景: 在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化),這種著色器通過(guò)給定的模型視圖投影矩陣,著色器將一個(gè)基本色乘以一個(gè)取自紋理單元的nTextureUnit的紋理,將顏色與紋理進(jìn)行顏色混合后才填充到片段中
紋理光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,G Lfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
參數(shù)1: 存儲(chǔ)著色器種類
參數(shù)2:模型44矩陣
參數(shù)3: 投影44矩陣
參數(shù)4: 點(diǎn)光源位置
參數(shù)5: 顏色值(幾何圖形的基本色)
參數(shù)6: 紋理單元
試用場(chǎng)景: 在繪制圖形時(shí),可以應(yīng)用變換(模型/投影變化),這種著色器通過(guò)給定的模型視圖投影矩陣,著色器將一個(gè)紋理通過(guò)漫反射照明計(jì)算進(jìn)行調(diào)整(相乘)