OpenGL渲染架構2.0

一、OpenGL渲染管線

1.客戶端-服務器

z3.png

管線一部分部分是客戶端唱较,另一部分是服務器扎唾。就OpenGL而言,客戶端是存儲在 CPU 存儲器中的南缓,驅動程序將渲染命令與數(shù)據(jù)組合起來發(fā)給服務器GPU執(zhí)行胸遇。

2.數(shù)據(jù)緩存區(qū)buffer


屏幕快照 2019-05-14 上午10.07.12.png

因為從一塊內(nèi)存中將數(shù)據(jù)復制到另一塊內(nèi)存中,傳遞數(shù)據(jù)比較慢汉形,而且在復制數(shù)據(jù)是的時候纸镊,CPU和GPU都不能操作數(shù)據(jù)(以免數(shù)據(jù)錯誤)。所以客戶端不斷的將數(shù)據(jù)和命令組合在一起送入緩沖區(qū)概疆,緩沖區(qū)再發(fā)送到服務器執(zhí)行逗威。

二、管線流程圖

z1.png

管線中的著色器分為兩類岔冀,一類是可編程管線著色器凯旭,另一類是固定管線著色器

\color{Purple}{可編程管線著色器}

頂點著色器的輸入途徑,attribute,textureData,uniform頂點著色器處理從客戶端輸入的數(shù)據(jù)使套,用數(shù)學運算來計算光照效果罐呼、位移、顏色值等侦高。有幾個頂點嫉柴,頂點著色器就要執(zhí)行幾次。

圖元組合(Primitive Assembly)框圖意在說明3個頂點已經(jīng)組合在了一起

片元著色器:片元著色器來計算像素點的最終顏色

頂點著色(包括細分和幾何著色)決定了一個頂點位置奉呛,而片元著器的信息來決定某個像素點的顏色计螺。

頂點著色器(必要)
細分著色器(可選)
幾何著色器(可選)
片元著色器(必要)

\color{Purple}{固定管線著色器}

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:紋理單元

\color{Purple}{OpenGL七種不同的圖元}
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 扇形

\color{Purple}{渲染流程補充}

第一步:

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()

來源:http://www.reibang.com/p/c0e71b4c1bf4

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惨远,一起剝皮案震驚了整個濱河市谜悟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌北秽,老刑警劉巖葡幸,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贺氓,居然都是意外死亡蔚叨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門掠归,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缅叠,“玉大人,你說我怎么就攤上這事虏冻》袅唬” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵厨相,是天一觀的道長领曼。 經(jīng)常有香客問我,道長蛮穿,這世上最難降的妖魔是什么庶骄? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮践磅,結果婚禮上单刁,老公的妹妹穿的比我還像新娘。我一直安慰自己府适,他們只是感情好羔飞,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布肺樟。 她就那樣靜靜地躺著,像睡著了一般逻淌。 火紅的嫁衣襯著肌膚如雪么伯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天卡儒,我揣著相機與錄音田柔,去河邊找鬼。 笑死骨望,一個胖子當著我的面吹牛硬爆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锦募,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼摆屯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了糠亩?” 一聲冷哼從身側響起虐骑,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赎线,沒想到半個月后廷没,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡垂寥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年颠黎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滞项。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡狭归,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出文判,到底是詐尸還是另有隱情过椎,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布戏仓,位于F島的核電站疚宇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赏殃。R本人自食惡果不足惜敷待,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仁热。 院中可真熱鬧榜揖,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炎滞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诬乞,已是汗流浹背册赛。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留震嫉,地道東北人森瘪。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像票堵,于是被迫代替她去往敵國和親扼睬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354