在OpenGL中,一切事物都在3D空間中,但我們的屏幕坐標(biāo)確實(shí)2D像素數(shù)組,OpenGL大部分工作就是把3D坐標(biāo)轉(zhuǎn)換成適應(yīng)屏幕的2D像素。
3D坐標(biāo)轉(zhuǎn)換成2D屏幕坐標(biāo)的過程是由OpenGL的圖形渲染管線管理的。
圖形渲染管線的工作可以被劃分為兩個主要的部分:
把3D坐標(biāo)轉(zhuǎn)換成2D坐標(biāo)。
把2D坐標(biāo)轉(zhuǎn)換成實(shí)際有顏色的像素。
注意:2D坐標(biāo)和像素是不同的,2D坐標(biāo)精確的描述了一個點(diǎn)在2D空間中的位置,二2D像素是這個點(diǎn)的近似值,2D像素收到你的屏幕/窗口分辨率的限制
圖形渲染管線包含很多部分。首先,我們以數(shù)組形式傳遞3D個3D坐標(biāo)作為圖形渲染管線的輸入,用來表示三角形,這個數(shù)組叫做定點(diǎn)數(shù)據(jù)(Vertex Data);定點(diǎn)數(shù)據(jù)是一系列定點(diǎn)的集合。一個頂點(diǎn)(Vertex)是一個3D坐標(biāo)的集合。為了簡單起見,我們假定每個頂點(diǎn)只由一個3D位置和一些顏色值構(gòu)成。
注意:OpenGL不知道我們傳入的頂點(diǎn)位置和顏色值到底需要構(gòu)成什么,這個時候就需要我們?nèi)ブ付ㄟ@些數(shù)據(jù)去表示渲染類型。做出的這些提示叫做圖元(Primitive),我們可以指定一下三種:GL_POINTS、GL_TRIANGLES、GL_LINE_STRIP。
圖形渲染管線的第一個部分是頂點(diǎn)著色器,它把單獨(dú)的頂點(diǎn)作為輸入,頂點(diǎn)著色器的主要目的是吧3D坐標(biāo)轉(zhuǎn)換成另外一種3D坐標(biāo)。同時頂點(diǎn)著色器允許我們隊頂點(diǎn)屬性進(jìn)行一些基本處理。
圖元裝配階段是將頂點(diǎn)著色器輸出的頂點(diǎn)作為一個輸入,(如果是GL_POINTS,那么就是一個頂點(diǎn)),并把所有的點(diǎn)裝配成指定圖元的形狀。
圖元裝配階段的輸出會傳遞給幾何著色器。集合著色器吧圖元形式的一系列定點(diǎn)作為集合的輸入,它可以通過產(chǎn)生新的頂點(diǎn)構(gòu)造出新的(或者其他的)圖元來生成其他的形狀。
幾何著色器的輸出會被傳入光柵化階段,它會把圖元轉(zhuǎn)換成最終屏幕上相應(yīng)的像素生成供片段作色器使用的片段。在片段著色器運(yùn)行之前會執(zhí)行裁剪,裁剪會丟棄在視線范圍外的所有像素,以提供執(zhí)行效率。
片段著色器的主要目的是計算一個像素的最終顏色。在顏色確定以后,最終會被傳入到一個最后的階段 ,Alpha測試和混合測試階段。
-
OpenGL
+關(guān)注
關(guān)注
1文章
86瀏覽量
29640
原文標(biāo)題:OpenGL工作流程:把3D坐標(biāo)轉(zhuǎn)換成2D坐標(biāo)
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
如何計算才能把坐標(biāo)系轉(zhuǎn)換成水平的坐標(biāo)系?
為什么3D與2D模型不能相互轉(zhuǎn)換?
如何將相對坐標(biāo)轉(zhuǎn)換成UBFS中的絕對坐標(biāo)?
【Altium小課專題 第193篇】PCB封裝如何在2D和3D模式之間進(jìn)行切換?
全球首款2D/3D視頻轉(zhuǎn)換實(shí)時處理芯片:DA8223
Creaform發(fā)布MaxSHOT 3D光學(xué)坐標(biāo)測量系統(tǒng)
2D到3D視頻自動轉(zhuǎn)換系統(tǒng)

Cocos2d-x開發(fā)游戲的坐標(biāo)系知識介紹
3d人臉識別和2d人臉識別的區(qū)別
KITTI 3D檢測數(shù)據(jù)集
將2D/3D圖表和圖形添加到WindowsForms應(yīng)用程序中
一文了解3D視覺和2D視覺的區(qū)別
AN-1249:使用ADV8003評估板將3D圖像轉(zhuǎn)換成2D圖像

評論