OpenGL pipeline (very important)
1 modeling:?
1.1 將OpenGL配置到應(yīng)用程序中;
1.2 設(shè)置 graphic context,如讀入要進(jìn)行貼圖的紋理,設(shè)置要投影的模式(glfrustum),light source, material;
2 vertex processing
2.1 transformation,將vertex從 local space變到eye space
2.2 為定點(diǎn)進(jìn)行l(wèi)ighting computation
2.3 計(jì)算vertex的texture coordinate
2.4 texture coordinate transformation
3
3.1 primitive assembly: 哪幾個(gè)vertex屬于同一個(gè)polygon
3.2 clipping, 將在eye space中的object與第一步modeling中設(shè)置的frustum進(jìn)行切割,并將切割的結(jié)果,即frustum里頭的object, 進(jìn)行perspective division,即將frustum壓縮到2*2*2的Cube里頭
3.3 將cube里的object變換到window/screen space中, 即用glviewport 設(shè)置結(jié)果要在window的哪個(gè)地方顯示
3.4 back culling
4 rasterization
4.1 rasterize 面對(duì)eye 的object的polygon,因?yàn)樵?.4中back culling,已將所有背對(duì)eye的面去除;
?
5 fragment processing
5.1 通過對(duì)vertex進(jìn)行差值,得到每一個(gè)fragment的顏色(光源提供給每個(gè)fragment的亮度,只有頂點(diǎn)進(jìn)行了lighting computation,這是OpenGL默認(rèn)的,如果想顏色的過渡更細(xì)膩,可以分割polygon,這樣vertex就多了);
5.2 通過vertex的紋理坐標(biāo),即在紋理中的位置,對(duì)fragment進(jìn)行坐標(biāo)差值,確定fragment對(duì)應(yīng)的紋理的位置,然后讀取紋理值;
?
6 per-fragment operation
各種測試(alpha, depth etc),不通過測試的fragment直接丟棄,這也是為什么叫fragment為potential pixel的原因,只有通過測試的fragment才能在屏幕上顯示成為pixel。其實(shí)pixel的本質(zhì)是面積很小的cube,但是為了方便理解,我們一般認(rèn)為它是點(diǎn);
7 frame buffer
?
第2步vertex processing和第4步fragment processing可以再編程,即自己寫shader代替編譯器的相應(yīng)部分。
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/qingsunny/p/3304655.html
總結(jié)
以上是生活随笔為你收集整理的OpenGL pipeline (very important)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Esxi直通板载Sata
- 下一篇: 在图像中截取小图并保存