頂點、 圖元类嗤、片元糊肠、像素的含義

裝載自:https://blog.csdn.net/u014800094/article/details/53035889

階段1. 頂點 ->圖元

幾何頂點被組合為圖元(點,線段或多邊形)遗锣,然后圖元被合成片元货裹,最后片元被轉(zhuǎn)換為幀緩存中的象素數(shù)據(jù)。

階段2. 圖元 ->片元

圖元被分幾步轉(zhuǎn)換為片元:圖元被適當(dāng)?shù)牟眉艟ィ伾图y理數(shù)據(jù)也相應(yīng)作出必要的調(diào)整弧圆,相關(guān)的坐標(biāo)被轉(zhuǎn)換為窗口坐標(biāo)。最后笔咽,光柵化將裁剪好的圖元轉(zhuǎn)換為片元搔预。

1) 裁剪

在裁剪時點,線段和多邊形處理略微不同叶组。對于點拯田,要么保留原始狀態(tài)(在裁剪體內(nèi)部),要么被裁掉(在裁剪體外部)甩十。對于線段和多邊形來說船庇,如果部分在裁剪體外部,則需要在裁剪點生成新的幾何頂點侣监。對于多邊形鸭轮,還需要在新增的頂點間增加完整的邊。不論裁剪了線段還是多邊形橄霉,都需要給新增幾何點賦予邊界標(biāo)志窃爷、法線、顏色和紋理坐標(biāo)信息酪劫。
裁剪過程時兩步:
a 應(yīng)用程序指定裁剪(Application-specific clipping)吞鸭,一旦組合圖元完成后,如果在程序中用glClipPlane()函數(shù)定義了任意的裁剪面覆糟,就進(jìn)行裁剪刻剥。
b 視景體裁剪(View volume clipping),隨后滩字,圖元被投影矩陣投影(進(jìn)入裁剪坐標(biāo)系)造虏,被相應(yīng)的視景體裁剪御吞。投影矩陣可以由glFrustum() 或者glOrtho()定義,投影矩陣的操作和上面其他矩陣變換的操作相同漓藕。

2) 轉(zhuǎn)換到窗口坐標(biāo)

裁剪坐標(biāo)在轉(zhuǎn)換為窗口坐標(biāo)之前陶珠,要除以規(guī)格化設(shè)備坐標(biāo)(normalized device coordinates)的w值進(jìn)行規(guī)范化。然后對這些規(guī)范化數(shù)據(jù)進(jìn)行視口變換(viewport)計算生成窗口坐標(biāo)享钞∽岱蹋可以用glDepthRange()和glViewport()控制視口大小,決定屏幕上顯示圖象的區(qū)域栗竖。

3) 光柵化

光柵化是將一個圖元轉(zhuǎn)變?yōu)橐粋€二維圖象(其實只是布滿平面暑脆,沒有真正的替換幀緩存區(qū))的過程。二維圖象上每個點都包含了顏色狐肢、深度和紋理數(shù)據(jù)添吗。將該點和相關(guān)信息叫做一個片元(fragment)。(yuyu注:這就是片元和像素之間的關(guān)鍵區(qū)別份名,雖然兩者的直觀印象都是的像素碟联,但是片元比像素多了許多信息,在光柵化中紋理映射之后圖元信息轉(zhuǎn)化為了像素)在這個階段僵腺,對象素繪制和位圖進(jìn)行操作需要用到當(dāng)前柵格位置(用glRasterPos()定義)鲤孵。正如上面討論的,三種圖元的光柵化方法是不同的想邦,另外裤纹,象素塊和位圖也需要光柵化。
a)圖元
采用glPointSize(), glLineWidth(), glLineStipple()和 glPolygonStipple()函數(shù)可以選擇圖元的光柵化維數(shù)和模式丧没。另外鹰椒,還可以用glCullFace(), glFrontFace()和glPolygonMode()控制多邊形正反面不同的光柵化效果。
b)象素
有幾個函數(shù)實現(xiàn)象素保存和轉(zhuǎn)換呕童。函數(shù)glPixelStore
()用于內(nèi)存中的象素是如何保存的漆际。glPixelTransfer() and glPixelMap()用于象素在寫入幀緩沖區(qū)前是如何處理的。glDrawPixels()定義了一個象素矩形夺饲。用glPixelZoom()實現(xiàn)象素的縮放奸汇。
c)位圖
位圖是具有特定片元模式的0和1的矩形。每個片元有相同的相關(guān)數(shù)據(jù)往声±拚遥可以用glBitmap()定義。
d)紋理存儲
紋理貼圖是將指定的部分紋理圖象映射到每個圖元上浩销。每個片元(fragment)具有的紋理坐標(biāo)屬性贯涎,該坐標(biāo)與紋理圖象坐標(biāo)對應(yīng),得到紋理圖象該位置的顏色值來修改片元的RGBA顏色慢洋,從而完成這個映射過程塘雳。用glTexImage2D()或glTexImage1D()來定義紋理圖象陆盘。glTexParameter()和glTexEnv()來控制紋理如何解釋和應(yīng)用到一個片元上。
e)霧
已經(jīng)光柵化的片元具有紋理貼圖修正后顏色败明,可以采用融合因子再融合霧顏色隘马,該融合因子大小根據(jù)視點和片元間的距離來定。用glFog*()指定霧化顏色和融合因子妻顶。

階段3. 片元->像素

OpenGL允許光柵化生成一個片元酸员,只要該片元通過一系列檢測就可以修改幀緩沖區(qū)中對應(yīng)象素。如果它通過測試盈包,片元數(shù)據(jù)可以直接替換幀緩沖區(qū)中的已有值沸呐,或者和已有值合并,這取決于設(shè)置的模式呢燥。
1)象素所有權(quán)(ownership)檢測
第一個測試是判斷在幀緩沖區(qū)中的象素所對應(yīng)的某個片元是否屬于當(dāng)前OpenGL上下文。如果屬于寓娩,片元進(jìn)行下一個測試叛氨。如果不屬于,窗口系統(tǒng)決定是否忽略該片元棘伴,或者是否進(jìn)行下一步片元操作寞埠。
2)裁剪檢測
用glScissor()函數(shù),可以定義一個任意屏幕校準(zhǔn)矩形焊夸,在該矩形外的片元將被忽略仁连。
3)Alpha檢測
Alpha測試只能在RGBA模式下進(jìn)行,如果片元的alpha值超出一個固定參照值阱穗,片元將被忽略饭冬,這個比較函數(shù)可以用glAlphaFunc()實現(xiàn)并設(shè)定參考值。
4)模版檢測
當(dāng)模版緩沖區(qū)的值超出一個參照值揪阶,模版測試將有條件的忽略該片元昌抠。這個比較函數(shù)和固定值可以用glStencilFunc()實現(xiàn)。不論圖元通過或沒有通過模版測試鲁僚,模版緩沖區(qū)中的值會根據(jù)glStencilOp()函數(shù)進(jìn)行修改炊苫。
5)深度檢測
當(dāng)深度緩沖區(qū)的值與參照值的比較失敗,深度測試忽略該片元冰沙。GlDepthFuc()用來執(zhí)行這個比較命令侨艾。如果模版啟用,深度比較的結(jié)果會影響模版緩沖區(qū)值的更新拓挥。
6)融合
融合合并了一個片元R唠梨、G、B和A值和存儲在幀緩沖區(qū)對應(yīng)位置的這些值撞叽。融合只能在RGBA模式下實現(xiàn)姻成,它的實現(xiàn)需要片元的alpha值和對應(yīng)當(dāng)前存儲象素插龄,還需要RGB值。用glBendFun()控制科展,可以修改融合因子的源和目標(biāo)均牢。
7)抖動
如果啟動抖動,片元的顏色或者顏色索引采用抖動算法才睹。這個算法只需要片元的顏色值和它的x和y坐標(biāo)徘跪。
8)邏輯操作
最后,在片元和幀緩沖區(qū)對應(yīng)值之間要進(jìn)行一個邏輯操作琅攘,結(jié)果將替換當(dāng)前幀緩沖區(qū)的值垮庐。用glLogicOp定義想要的邏輯操作。這個邏輯操作只能在顏色索引模式下運(yùn)行坞琴,而不能在RGBA模式運(yùn)行哨查。

象素

在OpenGL流水線的上個階段,片元轉(zhuǎn)換為幀緩沖區(qū)中的象素剧辐。幀緩沖區(qū)實際上是一組邏輯緩沖區(qū)——包括顏色緩沖區(qū)寒亥、深度緩沖區(qū)、模版緩沖區(qū)和累積緩沖區(qū)荧关。顏色緩沖區(qū)包括左溉奕、前右、后左忍啤、后右和一些輔助緩存值(auxiliary buffers)加勤。可以直接從中讀取或者復(fù)制同波。對于OpenGL不同上下文鳄梅,這些緩沖區(qū)可能不全
1)幀緩沖區(qū)操作
用glDrawBuffer為繪圖選擇一個顏色緩沖區(qū)。另外在預(yù)片元化(per-fragment)操作后参萄,可以用四個不同函數(shù)保留寫入這些邏輯緩沖區(qū)的操作卫枝,glIndexMask(), glColorMask(), glDepthMask(), and glStencilMask()。glAccum()對累積緩沖區(qū)進(jìn)行操作讹挎。最后glClearColor(), glClearIndex(), glClearDepth(), glClearStencil()和glClearAccum().對不同緩沖區(qū)中指定相對應(yīng)的顏色值校赤、顏色索引值、深度值筒溃、模板值和累積值马篮。
2)讀取和復(fù)制象素
用glReadPixel()從幀緩沖區(qū)中把象素讀到內(nèi)存中,進(jìn)行各種操作怜奖,保存處理結(jié)果浑测。另外,可以用glCopyPixel()從幀緩沖區(qū)中復(fù)制一塊象素到另一個幀混存。glReadBuffer()可以讀取和復(fù)制顏色緩沖區(qū)中的象素迁央。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掷匠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岖圈,更是在濱河造成了極大的恐慌讹语,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜂科,死亡現(xiàn)場離奇詭異顽决,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)导匣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門才菠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贡定,你說我怎么就攤上這事赋访。” “怎么了厕氨?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵进每,是天一觀的道長。 經(jīng)常有香客問我命斧,道長,這世上最難降的妖魔是什么嘱兼? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任国葬,我火速辦了婚禮,結(jié)果婚禮上芹壕,老公的妹妹穿的比我還像新娘汇四。我一直安慰自己,他們只是感情好踢涌,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布通孽。 她就那樣靜靜地躺著,像睡著了一般睁壁。 火紅的嫁衣襯著肌膚如雪背苦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天潘明,我揣著相機(jī)與錄音行剂,去河邊找鬼。 笑死钳降,一個胖子當(dāng)著我的面吹牛厚宰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遂填,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼铲觉,長吁一口氣:“原來是場噩夢啊……” “哼澈蝙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撵幽,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灯荧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后并齐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漏麦,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年况褪,在試婚紗的時候發(fā)現(xiàn)自己被綠了撕贞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡测垛,死狀恐怖捏膨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情食侮,我是刑警寧澤号涯,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站锯七,受9級特大地震影響链快,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜眉尸,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一域蜗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧噪猾,春花似錦霉祸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坪蚁,卻和暖如春奔穿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迅细。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工巫橄, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茵典。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓湘换,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彩倚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容