OpenGL-圖元繪制流程

項(xiàng)目運(yùn)行流程:

主函數(shù)(main)->手動(dòng)調(diào)用初始化函數(shù)(SetupRC)->執(zhí)行重塑函數(shù)(ChangeSize)->執(zhí)行渲染函數(shù)(RenderScene)

main

  1. 實(shí)現(xiàn)一些函數(shù)的注冊(cè)和窗口的設(shè)置
  2. 調(diào)用SetupRC
  3. 啟動(dòng)mainLoop(運(yùn)行循環(huán))

SetupRC

  1. 設(shè)置背景顏色
  2. 初始化固定管線(xiàn)
  3. 開(kāi)啟深度測(cè)試等
  4. 利用(modelViewMatrix, projectionMatrix)設(shè)置變換管道,此時(shí)modelViewMatrix是默認(rèn)的單元矩陣,projectionMatrix應(yīng)該是只是傳一個(gè)內(nèi)存地址過(guò)去,使用時(shí)會(huì)從這個(gè)地址取值(待更正)
  5. 設(shè)置觀察者位置(默認(rèn)在原點(diǎn))
  6. 設(shè)置各個(gè)需要繪制的批次類(lèi)的頂點(diǎn)數(shù)組,并分別開(kāi)啟提交批次類(lèi)->復(fù)制頂點(diǎn)坐標(biāo)->結(jié)束提交
//參數(shù)1:表示使用的圖元
//參數(shù)2:頂點(diǎn)數(shù)
//參數(shù)3:紋理坐標(biāo)(可選)
void GLBatch::Begin(GLenum primitive,GLuint nVerts,GLuint nTextureUnits = 0);
//復(fù)制頂點(diǎn)坐標(biāo)
void GLBatch::CopyVertexData3f(GLFloat *vNorms);
//結(jié)束,表示已經(jīng)完成數(shù)據(jù)復(fù)制工作
void GLBatch::End(void);

ChangeSize

  1. 設(shè)置視口
  2. 設(shè)置Frustum(平截頭體)
//垂直方向上的視場(chǎng)角度
//屏幕寬高比
//近裁剪面距離
//遠(yuǎn)裁剪面距離
void SetPerspective(float fFov, float fAspect, float fNear, float fFar)
  1. 設(shè)置投影矩陣,通過(guò)Frustum獲取
    projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());
  1. 設(shè)置模型視圖矩陣(單元矩陣)
    //調(diào)用頂部載入單元矩陣
    modelViewMatrix.LoadIdentity();

RenderScene

由于示例使用的是:觀察者不動(dòng),物體動(dòng)的方式

  1. 清理緩存
  2. 模型視圖矩陣壓棧(單元矩陣),通過(guò)3,4步的觀察者矩陣(模型矩陣)和視圖變換矩陣(物體矩陣,物體會(huì)翻轉(zhuǎn)或移動(dòng))
  3. 通過(guò)觀察者坐標(biāo)獲取觀察者矩陣,跟棧頂?shù)膯卧仃囅喑说玫叫碌木仃?,存放在棧?/li>
  4. 通過(guò)物體坐標(biāo)獲取物體位置矩陣(視圖變換矩陣),跟存放在棧頂?shù)男戮仃囅喑?,存放在棧?/li>
  5. 使用平面著色器繪制
//GLShaderManager 中的Uniform 值——平面著色器
//參數(shù)1:平面著色器
//參數(shù)2:幾何圖形變換獲得的一個(gè) 4 * 4變換矩陣,transformPipeline.GetModelViewProjectionMatrix() 獲取,GetMatrix函數(shù)就可以獲得矩陣堆棧頂部的值
//參數(shù)3:顏色值(黑色)
shaderManager.UseStockShader(GLT_SHADER_FLAT, transformPipeline.GetModelViewProjectionMatrix(), vBlack);
  1. 出棧
  2. 交換緩存區(qū)
最后編輯于
?著作權(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ù)。

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