Ⅰ OpenGL圖像渲染過程3.0
背景: 3D圖形渲染的時候,需要決定哪些部分是對觀察者可見的,哪些部分對觀察者是不可見的,對不可見的部分,應該丟棄。
這個過程叫做隱藏面消除(hidden surface elimination)。
先繪制場景中距離觀察者較遠的物體,再繪制場景中離觀察者較近的物體。
OpenGL不去渲染視角看不到的面
OPenGL可以做到檢查正面朝著觀察者的面,丟棄背向的面,節約片元著色器的性能。
正背面的區分:按照逆時針頂點連接順序的面為正面。
深度緩沖區(DepthBuffer)和顏色緩沖區(ColorBuffer)是對應的。深度緩沖區存儲像素的深度信息,顏色緩沖區存儲像素的顏色信息。在決定是否繪制一個物體表面時候,首先要將物體表面的像素的深度值和當前深度緩沖區中的數據進行比較,如果大於深度緩沖區中的深度,就丟棄物體表面的顏色值和深度值,如果小於就使用物體表面的顏色值,並更新這個像素的深度值和顏色值。這個過程叫做深度測試。
清除深度緩沖區的時候,默認值是1.范圍是(0-1) 之間,值越小,表示越靠近觀察者。
類型快查
啟用polygon offset,讓深度之間產生一個間隔,如果兩個圖形之間有間隔,將間隔值略微增加,讓重疊的兩個圖形與之前的有所區分。
每個片元(Fragment)的深度值都會增加一些偏移量
m多邊形深度斜率最大值
r常量,窗口坐標系能分辨的最小差值
offset是負值將使z值距離我們更近。一般都設置成-1 -1.factor和units.
當深度緩沖區被關閉的時候,新的顏色將簡單的覆蓋原來的顏色緩存區存在的顏色值。
當深度緩沖弄區再次被打開時候,新的顏色片段只有當離原來的值更接近裁剪平面時候才會替換原來的顏色片段。????
目標顏色:已經存儲在顏色緩存區的顏色
源顏色:作為當前渲染命令結果,進入顏色緩存區的顏色
最終顏色的計算是由顏色混合方程式決定的
Cf :最終的參數顏色
Cs :源顏色
Cd :目標顏色
S :源混合因子
D: 目標混合因子
混合方程式快查
S源混合因子
D目標混合因子
C表示常量顏色,黑色
混合因子計算方法快查
混合函數經常用於實現在其他一些不透明物體前繪制一個透明物體的效果。
Ⅱ 零基礎入門OpenGL系列教程(六、早期OpenGL繪圖屬性)
點的屬性恐怕就只有點的大小了,通過調用 void glPointSize(GLfloat size) 函數可以設置點的大小,傳入的參數是一個浮點數代表點的像素。
這個設置是支持 反走樣 (antialiasing)的,如果你設置了反走樣這個函數同樣適用。
線的屬性大致有兩種,一是線寬,二是樣式。
設置線寬和設置點大小一樣,通過 void glLineWidth(GLfloat width) 函數來設置,傳入的參數也是浮點數。同樣支持反走樣。
線的樣式設置比較有意思,通過 void glLineStipple(GLint factor,GLushort pattern) 函數來設置。第一個參數是因子,我把它簡單的理解為線條樣式拉伸的系數,第二個參數比較有趣,它是用來描繪具體樣式的16位整數。1對應實線,0對應空白,通過這種方法表現出來樣式。
這是我畫的虛線,對應的樣式是0x0A0A。在設置樣式的時候需要調用 glEnable(GL_LINE_STIPPLE) 函數打開線段樣式渲染狀態。
即使是二維的平面也分為正面和背面,比如說如果我順時針方向渲染的點為正面,那麼逆時針渲染的點就是背面了。有了這一概念我們就可以單獨的對圖形的某一個面操作,比如說正面填充背面描邊。
void glFrontFace(GLenum mode) 可以設置圖形的正面與背面(相反的為背面),參數是順時針或逆時針。 void glPolygonMode(GLenum face,GLenum mode) 可以分別對正面或背面以不同方式渲染。舉個例子。
我通過順時針和逆時針兩種方式畫的兩個三角形,渲染結果是不同的。
此外, void glEdgeFlag( GLboolean flag) 函數可以指定邊是否是邊界,如果不是可以隱藏它。
通過這個特性我簡單的畫了一個「二」。
關於面的屬性還有很多。比如樣式、紋理甚至霧化效果,這個在現代OpenGL裡面再說吧。
Ⅲ 缺少OpenGL32.dll文件該怎麼弄
解決win10缺少「某某某.dll」文件的方法:
方法一:下載丟失的.dll文件,復制到系統盤的C:WindowsSystem32文件夾中。
1、網路搜索輸入「某某某.dll」下載,查找適當的「某某某.dll」文件下載網頁,點擊打開下載;
以上就是win10系統缺少「某某某.dll」文件的解決方法。
Ⅳ OpenGL ES手冊翻譯---3.柵格化(一)
柵格化是一個把圖元轉換成二維圖像的過程。圖像的每個點都包含了顏色和深度這樣的信息。因此,柵格化一個圖元包含了兩個部分。第一步是要確定圖元在窗口坐標中所佔的整數網格的方塊。第二步,給每個方塊分配顏色和深度值。處理的結果傳遞給GL的下一個階段(對每個片段的操作),GL使用這些信息更新幀緩沖區中的相應合適的位置。圖3.1是柵格化處理過程。碎片的顏色由片段著色器決定(見3.8節),片段著色器使用由柵格化操作(見3.3到3.6節)產生的varying變數來實現。最後的深度值由柵格化操作決定柵格化點,線或者多邊形的結果都是通過片段著色器來規定的。
一個網格和z(深度)方向的參數以及varying數據被合稱為一個碎片(fragment);這些參數被統稱為關聯數據。一個碎片基於整數網格坐標系,從左下角開始柵格化操作也有一個指定的碎片的中心,這個中心是從左下角開始的(1/2,1/2)偏移量的地方(也就是基於半整數坐標系)。
在GL中網格不要求完全是方形的。柵格化規則不會受網格實際長寬比的影響。顯示非方形的網格會導致柵格化的點和線段呈現出來在一個方向上比另一個方向上胖一點。我們指定碎片是正方形的,這樣可以簡化抗鋸齒和紋理操作。
幾個因素會影響柵格化。點可能會有不同的直徑,線段會有不同的寬度。多重采樣必須被用在柵格化抗鋸齒的圖元中(見3.2節)。
考慮在窗口坐標系中,把圖元 平移(x,y),得到 ,其中x和y是整數。只要 和 不會被裁剪,那麼每從 產生的每個碎片 和相對應的 產生的每個碎片 是相同的,只是 和 的中心偏移
多重采樣是一種GL圖元:點,線和三角形抗鋸齒的機制。這個技術是在所有圖元上的每個像素進行多次采樣。每次像素更新後,顏色采樣值會被解析成一個單一的,可以顯示的顏色,抗鋸齒操作在應用層面會被自動處理。因為每個采樣點都包括顏色,深度和模板信息,顏色(包括紋理操作),深度和模板函數和單次采樣模式下效果是一樣的。
還有另外一個緩沖區,叫做多采樣緩沖區,被添加在幀緩沖區上。像素的采樣值,包括顏色,深度,模板值,都儲存在這個緩沖中。當幀緩沖包含了一個多重采樣緩沖,幀緩沖就沒有深度和模板緩沖了,甚至多采樣緩沖也不會存儲深度和模板的值。但是,顏色緩沖和多采樣緩沖是共存的。
多重采樣抗鋸齒對渲染三角形是非常有用的,因為它不需要用排序來消除隱藏的表面,它可以正確的處理相鄰的三角形,對象的輪廓甚至是相交的三角形。
如果 SAMPLE_BUFFERS 的值是一,所有圖元的柵格化就變了,而是指多重采樣的柵格化。而圖元的柵格化是指單采樣的柵格化。將 GetIntegerv 函數的 pname 設置為 SAMPLE_BUFFERS 就可以查詢到 SAMPLE_BUFFERS 的值。
一個像素碎片的內容在多重渲染期間有兩種方式。第一種,每個碎片都包含一個 SAMPLE 位數的信息值。這個 SAMPLE 值是依賴實現的常量,可以通過把函數 GetIntegerv 的 pname 設置為 SAMPLES 來查詢。
第二種,每個碎片都包含了 SAMPLES 的深度值,一些varying值,而不是在單采樣渲染模式下的單一的深度值和一些varying變數。GL實現時可能會選擇給多個采樣值分配相同的varying變數。評估varying值的位置可以是在像素內的任何位置,包括碎片中心或者采樣位置。在同一個位置的varying值不需要評估。每個像素碎片因此由網格坐標的整數x和y, SAMPLES 的varying值,和一個最大 SAMPLES 的位數信息組成。
多重采樣的柵格化在GL上下文創建後是不能打開或者關閉的。如果 SAMPLE_BUFFER 是一就是打開的,不是一,那麼就是關閉的。
圖元的多采樣的柵格化很大程度上和單采樣的柵格化是不同的。可以理解為在幀緩沖的每個像素有對應的 SAMPLES 位置相關聯。這些位置不是一個區域或者面積,而是一個准確的位置,每個位置被稱為一個采樣點。和像素相關聯的采樣點的位置可能在正方形單元的裡面或者外面,這個正方形單元是指像素的邊界。不僅如此,采樣點的相關位置可能和幀緩沖中的每個像素相同也有可能不同。
如果采樣點位置和像素不同,那麼采樣點位置應該和窗口對齊,而不是屏幕。另外,渲染結果也是通過窗口位置指定的。在3.1節中描述的不變性要求對所有的多重采樣柵格化是寬松的,因為采樣位置可能是像素位置的一個函數。
查詢像素的實際采樣位置是不可能的。
點的大小是從著色器的內建變數 gl_PointSize 獲取,受到依賴實現的點的大小范圍的鉗制。如果 gl_PointSize 小於等於0,將產生未定義的結果。點大小的范圍由 ALIASED_POINT_SIZE_RANGE 決定,可以通過第六章的描述中那樣查詢到。支持的點的最大大小至少是1.
點的柵格化為每個幀緩沖的像素產生一個碎片,像素中心在中心點為
的方形中,方形的邊長和點的大小相同。
柵格化點產生的所有碎片分配給相同的關聯數據,即對應於該點的頂點的數據。同時, gl_PointCoord 片段著色器的輸入定義了一個機遇每個碎片單元的坐標系空間(s,t),s變數是水平的從左到右0到1的點,t是垂直的從上到下為0到1的點。
下面的公式用來評估(s,t)的值:
size 是點的大小, 是碎片的窗口坐標的整數值, 是該點頂點的精確的,無邊界的窗口坐標。
如果 SAMPLE_BUFFERS 是1,點的柵格化將使用下面的方式。點的柵格化對每個幀緩沖的像素生成一個碎片,這些像素有一個或者多個采樣點,這些采樣點交匯在一個以點 為中心的區域中。這個區域是一個正方形的,邊長等於像素大小。和這個區域相交的對應的采樣點的所有的覆蓋位為1,其他的覆蓋位為0。碎片的每個樣本相關聯的數據就是和點的柵格化相關聯的數據。點大小的支持范圍和沒有多重采樣的點是一樣的。
線段有線條,線迴路,或者一系列的分開的線段。線的寬度可以通過調用函數
來設置,一個合適的正數來控制柵格化線段的寬度。默認寬度是1.0。小於或者等於0.0的值會產生 INVALID_VALUE 錯誤。
線段光柵化首先將線段描述為x-major或y-major。x-major線段在閉合區間[-1,1]內有斜率;所有其他線段都是y-major線段(斜率由線段的端點確定)。我們將只為x-major部分指定光柵化,除非y-major部分的改變不明顯。
理想情況下,GL使用「菱形退出」規則來確定通過對線段進行柵格化而產生的那些碎片。對於中心位於窗口坐標 和 的每個片段f,定義四個半平面相交的菱形區域:
本質上,一條線段從 點到 點結束產生了一些和 相交的碎片f,除非 包含了 ,見圖3.2。
為了避免結束點在 的邊界上的困難,我們在原則上會對結束點進行少量的擾動。 點和 點各自的窗口坐標為 和 。擾動端點 和 的坐標為 和 。從 到 的線段產生了這些片段f,就是線段從 到 的線段和 相交後產生的,除非 點是在 中, ε是一個在柵格化線段時,為了使線段產生相同的碎片而選擇的非常小的量,而δ就是對任何一個ε都有0 < δ ≤ ε的替換量。
當 和 在碎片的中心是,碎片的特徵化處理簡化到使用Bresenham演算法做一處修改即可:這種情形下的產生的線段叫做「半開放」,這意味著沒有繪制最後的片段(對應於 )。這意味著當柵格化一系列的相互連接的,共享端點的線段時,將只會作用一次而不是兩次(就像Bresenham演算法那樣)。
由於菱形退出規則的初始條件和最終條件可能難以實現,因此允許其他線段光柵化演算法,遵循以下規則:
下一步,我們必須說明每個柵格化的碎片相關聯的數據如何獲取。一個產生的碎片的中心的窗口坐標值為 以及 ,那麼就有
(注意在 點的t = 0,在 點的t = 1)。碎片的相關數據f的值,不論它是裁剪w坐標還是一個頂點著色器varying變數輸出的元素,都可以被表示為
是線段的起始點和終點的相關的數據。 是線段的裁剪坐標系w中的起始點和終點。窗口z是深度值,必須使用線性插值:
我們僅僅描述了非抗鋸齒的線段的柵格化。現在我們介紹線段柵格化化操作時一些通用的參數。
實際的非抗鋸齒線的寬度是把需要的寬度四捨五入到整數的值來決定的,然後把這個數牽拉到實現相關的最大的非抗鋸齒線的寬度。如果指定的寬度取整的結果是0,那麼這個值被認為是1。
除了非抗鋸齒的線段的寬度為1的線段之外,都是通過在次要方向(對於x-主要線,次要方向是y,對於y-主要線,次要方向是x)做偏移或者在次要方向復制碎片來進行柵格化操作(如圖3.3)。w表示取整的寬度(如果w=0時,w設為1)。如果線段在窗口坐標系中為 ,柵格化後線段的端點是 和 ,這樣產生的並不是一個單一的碎片,而是在每個x的位置(y-major是y)產生一個高為w(對於y-major的線段來說w是一行碎片的長度)的列。這列的位置最低的這個碎片,就是在修正過的坐標系中寬度為1的線段柵格化後產生的碎片。
GL狀態要求線的柵格化由線寬為浮點數構成。線寬的初始值是1.0。
如果 SAMPLE_BUFFERS 的值是1,線的柵格化將會使用下面的演算法。每個幀緩沖像素,有一個或者多個采樣點,和中心在線段上的矩形相交,線的柵格化為每個這樣的像素產生一個碎片(如圖3.4)。兩條邊和指定的線段平行;每條邊到線段的距離是線寬的一半:一條在線段的上方,一條在下方。另外兩條邊穿過線段的端點和指定線段的方向垂直。
和矩形相交的采樣點的覆蓋位為1,其他的覆蓋位為0。頂點著色器varying變數的輸出值和深度值通過置換等式3.1中對應的采樣位置的值做插值計算得出,得出的結果再用來計算等式3.2的值。實現過程可能會在多於一個采樣值上使用相同的varying變數的值。
並不是所有的寬度都需要支持線段的多重采樣,但是寬度為1.0的線段必須要提供支持。正如點的寬度一樣,GL實現時可能會查詢多重采樣線段寬度的等級的范圍和數目。
Ⅳ Windows7電腦初始化OpenGL4.6時出錯怎麼辦
Windows7電腦初始化OpenGL4.6時出錯處理辦法:
1、重新安裝平台並重啟電腦。
2、關閉防火牆與殺毒軟體。
3、測試dns。
4、進入計算機控制面板-系統屬性,新建系統變數【變數名QT_OPENGL變數值:angle】並重啟電腦。
5、更新顯卡驅動,以及觀察驅動是否和本地硬體兼容。
6、盲輸登錄,在平台登錄頁面按照印象輸入賬號密碼,回車登錄。
Ⅵ OpenGL 渲染技巧:正背面剔除、深度測試、多邊形偏移、 混合
在繪制3D場景時,我們需要決定哪些部分是對觀察者可⻅的,或者哪些部分是不可見的。對於不可⻅的部分,應該及早丟棄,這種做法叫做 隱藏⾯消除 。
先繪制紅色部分,再繪制⻩色部分,最後再繪制灰⾊部分,即可解決隱藏面消除的問題。即將場景按照物理距離和觀察者的距離遠近排序,由遠及近的繪制即可。
弊端: 如果三個三⻆形是相互重疊的,油畫演算法將⽆法處理。
從任何⼀個⽅向去觀察一個立方體,最多可以看到3個⾯。如果我們能以某種⽅式去丟棄這部分數據。OpenGL在渲染的性能即可提高超過50%。
任何平⾯都有2個⾯:正⾯和背面,⼀個時刻我們只能看到一面。 通過分析頂點數據的順序 ,OpenGL可以做到檢查所有正面朝向觀察者的面,並渲染它們;從⽽丟棄背面朝向的面。
⚠️注意: 正⾯和背⾯是有三角形的頂點定義順序和觀察者方向共同決定的。若觀察者的觀察⽅向發生改變,正⾯和背面也會發生相應的改變。
弊端: 如果前後兩個點都是正面或是背面,這時OpenGL無法區分哪個面在前,哪個面在後,就可能出現下圖所示的問題。
深度,就是像素點在3D世界中距離攝像機的距離,即Z值。
深度緩存區,就是⼀塊內存區域,專門存儲每個像素點的深度值。深度值(Z值)越⼤,則離攝像機就越遠。
為什麼需要深度緩沖區?
深度緩沖區和顏⾊緩存區是對應的。顏⾊緩存區存儲 像素的顏⾊信息 ,而深度緩沖區存儲 像素的深度信息 。
在決定是否繪制⼀個物體表⾯時,首先要將表面對應的像素的深度值與當前深度緩沖區中的值進⾏⽐較。如果大於深度緩沖區中的值,則丟棄這部分;否則利⽤這個像素對應的深度值和顏⾊值,分別更新深度緩沖區和顏色緩存區。這個過程稱為 深度測試 。
深度值,⼀般由16位、24位或者32位值表示,通常是24位。
使⽤正⾯/背面剔除法和深度測試法解決了OpenGL的渲染效率問題。
由於精度的限制,對於相差非常小的深度值(比如在同一個深度進行2次渲染),就可能出現不能正確區分兩個深度值的問題,導致測試的結果隨機出現。所以,顯示時2個畫⾯交錯出現,就會出現閃爍問題。
增大重疊或深度值接近的2個圖形的深度值差距,使得OpenGL可以區分兩個深度值。
步驟三: 關閉Polygon Offset
在OpenGL中提⾼渲染效率的⼀種⽅式。 只刷新屏幕上發⽣變化的部分。
OpenGL渲染時會把顏色值存在顏⾊緩存區中,每個⽚段的深度值也是放在深度緩沖區。
當混合功能被開啟時,源顏色和⽬標顏色的組合方式是 混合方程式 控制的。在默認情況下,混合方程式如下所示:
混合函數經常用於實現在其他一些不透明的物體前面繪制一個透明物體的效果。
實際上不止一種顏色混合方程式,OpenGL有5個不同的方程式進行選擇。
表中R、G、B、A 分別代表 紅、綠、藍、Alpha
表中下標S、D,分別代表源、⽬標
表中C 代表常量顏⾊(默認⿊色)
下⾯通過一個常見的混合函數組合來說明問題:
如果顏色緩存區已經有一種顏⾊紅色(1, 0, 0, 0)
在這上面混合一種alpha為0.6的藍色(0, 0, 1, 0.6)
最終顏色是以原先的紅色(⽬標顏色)與後來的藍色(源顏色)進⾏組合。源顏色的alpha值越高,添加的藍色顏色成分越高,⽬標顏⾊所保留的成分就會越少。
Ⅶ 3.OpenGL渲染技巧
1.渲染過程產生的問題
看到了不透明牆壁後面的東西,不應該渲染牆壁後的東西(隱藏面消除)
2.油畫渲染
距離觀察者由遠及近的繪制物體,可以解決。
但是這出現了新的問題,如果3個三角形互相疊加,油畫演算法將無法渲染。
3.正背面剔除
OpenGL可以檢查朝向觀察者的面並渲染它們,而丟棄背面。
OpenGL如何區分正背面?
通過分析頂點數據的順序。
4.深度測試
深度:3D世界中像素點距離攝像機的距離。
深度緩沖區:一塊內存區域、存儲著每個像素點的深度值,值越大距離攝像機越遠。
為何需要深度緩沖區?繪制順序就不重要了。
深度測試:是否繪制物體表面,表面深度值和當前緩沖區深度值比較,大於則丟棄,否則更新像素顏色值和深度值。
5.多邊形模型
6.多邊形偏移
7.裁剪
8.顏色混合
1.談談圖形圖像渲染中的深度緩沖區?
一塊內存區域、存儲著每個像素點的深度值,值越大距離攝像機越遠。
為何需要深度緩沖區?繪制順序就不重要了。
2.闡述隱藏面消除解決方案?
正背面剔除、深度測試
3.闡述深度緩沖區帶來的隱患、解決方案、預防方案?
原因:深度緩沖區的限制導致深度相差很小。
隱患:交錯閃爍出現2個畫面
解決方案:讓深度值之間產生間隔,在執行深度測試前將立方體的深度值做一些細微的增加,區分重疊的2個圖形深度值。
第一步:Polygon Offset方式解決。
glEnable(GL_POLYGON_OFFSET_FILL)
第二步:指定偏移量
void glPolygonOffset(Glfloat factor,Glfloat units);
第三步: 關閉Polygon Offset
glDisable(GL_POLYGON_OFFSET_FILL)
預防方案:
不要將2個物體靠的太近;將裁剪面設置的離觀察者遠一些;使用高位數的深度緩沖區。
1.深度測試
2.OpenGL 裁剪
3.OpenGL混合
Ⅷ OpenGL 渲染常見問題
在繪制3D場景的時候,我們需要決定哪些部分是對觀察者可⻅的,或者哪些部分是對觀察者不可⻅的.對於不可⻅的部分,應該及早丟棄.例如在⼀個不透明的牆壁後,就不應該渲染.這種情況叫做」隱藏⾯消除」(Hidden surface elimination).
判斷模式glDepthFunc可以傳如下表所示參數,默認為GL_LESS
解決:
讓深度值之間產⽣間隔.可以理解為在執⾏深度測試前將⽴⽅體的深度值做⼀些細微的增加.於是就能將重疊的2個圖形深度值之前有所區分.
ZFighting閃爍問題預防
• 不要將兩個物體靠的太近,避免渲染時三⻆形疊在⼀起。這種⽅式要求對場景中物體插⼊⼀個少量的偏移,那麼就可能避免ZFighting現象。例如上⾯的⽴⽅體和平⾯問題中,將平⾯下移0.001f就可以解決這個問題。當然⼿動去插⼊這個⼩的偏移是要付出代價的。
• 盡可能將近裁剪⾯設置得離觀察者遠⼀些。上⾯我們看到,在近裁剪平⾯附近,深度的精確度是很⾼的,因此盡可能讓近裁剪⾯遠⼀些的話,會使整個裁剪范圍內的精確度變⾼⼀些。但是這種⽅式會使離觀察者較近的物體被裁減掉,因此需要調試好裁剪⾯參數。
• 使⽤更⾼位數的深度緩沖區,通常使⽤的深度緩沖區是24位的,現在有⼀些硬體使⽤使⽤32位的緩沖區,使精確度得到提⾼
在OpenGL 中提⾼渲染的⼀種⽅式.只刷新屏幕上發⽣變化的部分.OpenGL 允許將要進⾏渲染的窗⼝只去指定⼀個裁剪框.
基本原理:⽤於渲染時限制繪制區域,通過此技術可以再屏幕(幀緩沖)指定⼀個矩形區域。啟⽤剪裁測試之後,不在此矩形區域內的⽚元被丟棄,只有在此矩形區域內的⽚元才有可能進⼊幀緩沖。因此實際達到的效果就是在屏幕上開辟了⼀個⼩窗⼝,可以再其中進⾏指定內容的繪制。
混合函數經常⽤於實現在其他⼀些不透明的物體前⾯繪制⼀個透明物體的效果
我們把OpenGL 渲染時會把顏⾊值存在顏⾊緩存區中,每個⽚段的深度值也是放在深度緩沖區。當深度緩沖區被關閉時,新的顏⾊將簡單的覆蓋原來顏⾊緩存區存在的顏⾊值,當深度緩沖區再次打開時,新的顏⾊⽚段只是當它們⽐原來的值更接近鄰近的裁剪平⾯才會替換原來的顏⾊⽚段
表中R、G、B、A 分別代表 紅、綠、藍、alpha。
表中下標S、D,分別代表源、⽬標
表中C 代表常量顏⾊(默認⿊⾊)
glBlendFunc 指定 源和⽬標 RGBA值的混合函數;但是glBlendFuncSeparate函數則允許為RGB 和Alpha 成分單獨指定混合函數
在混合因⼦表中,
GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT值允許混合⽅程式中引⼊⼀個常量混合顏⾊。
多重采樣緩存區在默認情況下使⽤⽚段RGB值,並不包含顏⾊的alpha成分,我們可以通過調⽤glEnable來修改這個⾏為:
(本文為學習筆記,圖片來自cc老師)