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