精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenGL中的頂點、 圖元、片元、像素的含義解讀

汽車電子技術 ? 來源:apr01博客 ? 作者:apr01博客 ? 2022-10-18 15:12 ? 次閱讀

頂點(vertexs) 圖元(primitives) 片元(fragments,又叫片斷) 像素(pixels)

階段1. 頂點 - > 圖元

幾何頂點被組合為圖元(點,線段或多邊形),然后圖元被合成片元,最后片元被轉換為幀緩存中的象素數據。

階段2. 圖元 - > 片元

圖元被分幾步轉換為片元:圖元被適當的裁剪,顏色和紋理數據也相應作出必要的調整,相關的坐標被轉換為窗口坐標。最后,光柵化將裁剪好的圖元轉換為片元。

1) 裁剪

在裁剪時點,線段和多邊形處理略微不同。對于點,要么保留原始狀態(在裁剪體內部),要么被裁掉(在裁剪體外部)。對于線段和多邊形來說,如果部分在裁剪體外部,則需要在裁剪點生成新的幾何頂點。對于多邊形,還需要在新增的頂點間增加完整的邊。不論裁剪了線段還是多邊形,都需要給新增幾何點賦予邊界標志、法線、顏色和紋理坐標信息

裁剪過程時兩步:

a 應用程序指定裁剪(Application-specific clipping),一旦組合圖元完成后,如果在程序中用glClipPlane()函數定義了任意的裁剪面,就進行裁剪。

b 視景體裁剪(View volume clipping),隨后,圖元被投影矩陣投影(進入裁剪坐標系),被相應的視景體裁剪。投影矩陣可以由glFrustum() 或者glOrtho()定義,投影矩陣的操作和上面其他矩陣變換的操作相同。

2) 轉換到窗口坐標

裁剪坐標在轉換為窗口坐標之前,要除以規格化設備坐標(normalized device coordinates)的w值進行規范化。然后對這些規范化數據進行視口變換(viewport)計算生成窗口坐標。可以用glDepthRange()和glViewport()控制視口大小,決定屏幕上顯示圖象的區域。

3) 光柵化

光柵化是將一個圖元轉變為一個二維圖象(其實只是布滿平面,沒有真正的替換幀緩存區)的過程。二維圖象上每個點都包含了顏色、深度和紋理數據。將該點和相關信息叫做一個片元(fragment)。(yuyu注:這就是片元和像素之間的關鍵區別,雖然兩者的直觀印象都是的像素,但是片元比像素多了許多信息,在光柵化中紋理映射之后圖元信息轉化為了像素)在這個階段,對象素繪制和位圖進行操作需要用到當前柵格位置(用glRasterPos*()定義)。正如上面討論的,三種圖元的光柵化方法是不同的,另外,象素塊和位圖也需要光柵化。

a)圖元

采用glPointSize(), glLineWidth(), glLineStipple()和 glPolygonStipple()函數可以選擇圖元的光柵化維數和模式。另外,還可以用glCullFace(), glFrontFace()和glPolygonMode()控制多邊形正反面不同的光柵化效果。

b)像素

有幾個函數實現像素保存和轉換。函數glPixelStore*()用于內存中的像素是如何保存的。glPixelTransfer*() and glPixelMap*()用于像素在寫入幀緩沖區前是如何處理的。glDrawPixels()定義了一個像素矩形。用glPixelZoom()實現像素的縮放。

c)位圖

位圖是具有特定片元模式的0和1的矩形。每個片元有相同的相關數據。可以用glBitmap()定義。

d)紋理存儲

紋理貼圖是將指定的部分紋理圖象映射到每個圖元上。每個片元(fragment)具有的紋理坐標屬性,該坐標與紋理圖象坐標對應,得到紋理圖象該位置的顏色值來修改片元的RGBA顏色,從而完成這個映射過程。用glTexImage2D()或glTexImage1D()來定義紋理圖象。glTexParameter*()和glTexEnv*()來控制紋理如何解釋和應用到一個片元上。

e)霧

已經光柵化的片元具有紋理貼圖修正后顏色,可以采用融合因子再融合霧顏色,該融合因子大小根據視點和片元間的距離來定。用glFog*()指定霧化顏色和融合因子。

階段3. 片元->像素

OpenGL允許光柵化生成一個片元,只要該片元通過一系列檢測就可以修改幀緩沖區中對應像素。如果它通過測試,片元數據可以直接替換幀緩沖區中的已有值,或者和已有值合并,這取決于設置的模式。

1)像素所有權(ownership)檢測

第一個測試是判斷在幀緩沖區中的像素所對應的某個片元是否屬于當前OpenGL上下文。如果屬于,片元進行下一個測試。如果不屬于,窗口系統決定是否忽略該片元,或者是否進行下一步片元操作。

2)裁剪檢測

用glScissor()函數,可以定義一個任意屏幕校準矩形,在該矩形外的片元將被忽略。

3)Alpha檢測

Alpha測試只能在RGBA模式下進行,如果片元的alpha值超出一個固定參照值,片元將被忽略,這個比較函數可以用glAlphaFunc()實現并設定參考值。

4)模版檢測

當模版緩沖區的值超出一個參照值,模版測試將有條件的忽略該片元。這個比較函數和固定值可以用glStencilFunc()實現。不論圖元通過或沒有通過模版測試,模版緩沖區中的值會根據glStencilOp()函數進行修改。

5)深度檢測

當深度緩沖區的值與參照值的比較失敗,深度測試忽略該片元。GlDepthFuc()用來執行這個比較命令。如果模版啟用,深度比較的結果會影響模版緩沖區值的更新。

6)融合

融合合并了一個片元R、G、B和A值和存儲在幀緩沖區對應位置的這些值。融合只能在RGBA模式下實現,它的實現需要片元的alpha值和對應當前存儲象素,還需要RGB值。用glBendFun()控制,可以修改融合因子的源和目標。

7)抖動

如果啟動抖動,片元的顏色或者顏色索引采用抖動算法。這個算法只需要片元的顏色值和它的x和y坐標。

8)邏輯操作

最后,在片元和幀緩沖區對應值之間要進行一個邏輯操作,結果將替換當前幀緩沖區的值。用glLogicOp定義想要的邏輯操作。這個邏輯操作只能在顏色索引模式下運行,而不能在RGBA模式運行。

像素

在OpenGL流水線的上個階段,片元轉換為幀緩沖區中的像素。幀緩沖區實際上是一組邏輯緩沖區——包括顏色緩沖區、深度緩沖區、模版緩沖區和累積緩沖區。顏色緩沖區包括左、前右、后左、后右和一些輔助緩存值(auxiliary buffers)。可以直接從中讀取或者復制。對于OpenGL不同上下文,這些緩沖區可能不全

1)幀緩沖區操作

用glDrawBuffer為繪圖選擇一個顏色緩沖區。另外在預片元化(per-fragment)操作后,可以用四個不同函數保留寫入這些邏輯緩沖區的操作,glIndexMask(), glColorMask(), glDepthMask(), and glStencilMask()。glAccum()對累積緩沖區進行操作。最后glClearColor(), glClearIndex(), glClearDepth(), glClearStencil()和glClearAccum().對不同緩沖區中指定相對應的顏色值、顏色索引值、深度值、模板值和累積值。

2)讀取和復制像素

用glReadPixel()從幀緩沖區中把像素讀到內存中,進行各種操作,保存處理結果。另外,可以用glCopyPixel()從幀緩沖區中復制一塊象素到另一個幀混存。glReadBuffer()可以讀取和復制顏色緩沖區中的像素。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 光柵
    +關注

    關注

    0

    文章

    281

    瀏覽量

    27479
  • 像素
    +關注

    關注

    1

    文章

    203

    瀏覽量

    18559
  • OpenGL
    +關注

    關注

    1

    文章

    85

    瀏覽量

    29217
  • 函數
    +關注

    關注

    3

    文章

    4304

    瀏覽量

    62427
收藏 人收藏

    評論

    相關推薦

    鴻蒙開發【WebGL】簡單了解

    著色器 可以理解為運行在顯卡的指令和數據。在WebGL,著色器是用OpenGL ES著色語言(GLSL)編寫的。 完整的著色器包括頂點著色器和
    發表于 02-25 21:56

    鴻蒙原生應用服務開發-WebGL網頁圖形庫開發概述

    。 一、 著色器 可以理解為運行在顯卡的指令和數據。在WebGL,著色器是用OpenGL ES著色語言(GLSL)編寫的。 完整的著色器包括頂點著色器和
    發表于 03-08 14:24

    基于OpenGL的3DS圖形文件模型數據的獲取

    及特殊效果處理函數等,在虛擬現實、創建三維逼真場景方面是其它軟件無法比擬的。在物體的造型方面,OpenGL頂點圖元,由點構成線,由線及其拓撲結構構成多邊形,然后由點、線、面組成想要繪制的形體。這種造型
    發表于 03-07 11:53

    基于ArkUI框架開發——圖片模糊處理的實現

    公式處理的都放到C層處理。 第三、基于系統底層提供的OpenGL,操作頂點著色器及著色器操作GPU,得到我們要的模糊效果。 首先,我們
    發表于 05-05 14:53

    Arm OpenGL ES 3.0開發者指南

    OpenGL ES 3.0是對OpenGL ES 2.0標準的增強。 OpenGL ES 3.0添加了OpenGL 3.x已有的功能。其他
    發表于 08-08 06:03

    Mali和OpenGL ES3.0 指南

    更新的著色語言-GLSL ES 3.0更新的頂點著色使用變換反饋模式許多新對象類型著色器均勻緩沖區頂點數組對象采樣器對象同步對象像素緩沖區對象(PBO)
    發表于 08-25 07:10

    在BCB實現全屏幕OpenGL的原理

    其實在BCB實現全屏幕OpenGL的原理是很簡單的,只要在窗口OpenGL程序的基礎上做一個小小的改動即可:只要將窗口屬性修改為WS_POPUP就可
    發表于 09-07 18:13 ?15次下載

    OpenGL

    OpenGL OpenGL是個專業的3D程序接口,是一個功能強大,調
    發表于 12-25 11:16 ?594次閱讀

    基于OPENGL電力繪圖組態軟件的開發

    本文結合對 組態軟件 的認識與研究開發,介紹了該系統的發展情況及其在電力系統的應用,基于OPENGL 提出了組態軟件的設計思想、特點(可視化、窗口化、圖元化)以及面向用戶的
    發表于 06-30 17:44 ?0次下載
    基于<b class='flag-5'>OPENGL</b>電力繪圖組態軟件的開發

    淺談OpenGL的光照技術

    當不開啟光照時,使用頂點顏色來產生整個表面的顏色。用glShadeModel可以設置表面內部像素顏色產生的方式。GL_FLAT/GL_SMOOTH.
    發表于 05-08 10:21 ?3571次閱讀
    淺談<b class='flag-5'>OpenGL</b><b class='flag-5'>中</b>的光照技術

    OpenGL繪制圖形單元的技巧介紹

    OpenGL要求:指定頂點的命令必須包含在glBegin函數之后,glEnd函數之前(否則指定的頂點將被忽略)。在調用glBegin函數時,我們需要傳入一個參數,以告訴OpenGL我們
    發表于 05-07 08:31 ?2696次閱讀

    OpenGL的深度、深度緩存、深度測試

    其次,OpenGL會計算這些表面和觀察平面的距離。如果啟用了深度緩沖區,在繪制每個像素之前,OpenGL會把它的深度值和已經存儲在這個像素的深度值進行比較。新
    的頭像 發表于 07-05 16:49 ?3685次閱讀
    <b class='flag-5'>OpenGL</b><b class='flag-5'>中</b>的深度、深度緩存、深度測試

    如何把OpenGL3D坐標轉換成2D坐標

    OpenGL,一切事物都在3D空間中,但我們的屏幕坐標確實2D像素數組,OpenGL大部分工作就是把3D坐標轉換成適應屏幕的2D像素。3
    的頭像 發表于 07-09 10:40 ?8559次閱讀

    英特爾OpenGL ES API的新功能介紹

    演示OpenGL ES API的新功能。
    的頭像 發表于 11-06 06:26 ?3333次閱讀

    頂點序下圖的支配集算法綜述

    文中將粗糙集理論的屬性序引入到圖論,研究頂點序下圖的支配集問題。首先,在圖的頂點集上定義一個全序關系,稱為頂點序。然后,利用
    發表于 04-27 10:34 ?1次下載
    <b class='flag-5'>頂點</b>序下圖的支配集算法綜述