OpenGL入門第六課 裁剪和混合

2021-09-24 08:19:34 字數 1625 閱讀 1298

前面兩節分別說到了深度測試和正背面剔除,這兩種技能都是opengl中常用的提高渲染效能的方式;裁剪也是一種提高渲染性的方式. opengl允許只重新整理螢幕上發⽣變化的部分,可以在要進行渲染的窗⼝去指定⼀個裁剪框.在這個裁剪框裡去渲染你需要的畫面。

其基本原理是在渲染時限制繪製區域,通過此技術可以再螢幕(幀緩衝)指定⼀個矩形區域。然後啟⽤剪裁測試,不在此矩形區域內的片元講被丟棄,只有在此矩形區域內的片元才有可能進⼊幀緩衝。因此實際達到的效果就是在螢幕上開闢了⼀個⼩視窗,可以再其中進⾏指定內容的繪製。

裁剪測試發生在片元著色器,此時已經光柵化將3d圖形轉換成了2d圖形。裁剪測試確定(xw,yw)是否位於當前opengl上下文所確定的那一部分裁剪矩形範圍內.如果該⽚段位於裁剪區域之外,則被拋棄。 

這裡需要了解和區別一下視窗、視口和裁剪區域這三個概率。

opengl中,混合(blending)通常是實現物體透明度(transparency)的一種技術。透明就是說乙個物體(或者其中的一部分)不是純色(solid color)的,它的顏色是物體本身的顏色和它背後其它物體的顏色的不同強度結合。乙個有色玻璃窗是乙個透明的物體,玻璃有它自己的顏色,但它最終的顏色還包含了玻璃之後所有物體的顏色。這也是混合這一名字的出處,我們混合(blend)(不同物體的)多種顏色為一種顏色。所以透明度能讓我們看穿物體。

要想渲染有多個透明度級別的影象,我們需要啟用混合(blending) ;glenable(gl_blend)。啟用了混合之後,我們需要告訴opengl它該如何混合它。當混合功能被啟動時,源顏色和目標顏色的組合方式是通過混合方程控的:cf = (cs * s) + (cd * d)。其中cf表示最終計算得到的顏⾊ ;cs表示源顏色;cd表示目標顏色;s表示源混合因子指定了alpha值對源顏色的影響;d表示目標混合因子指定了alpha值對目標顏色的影響。

片元著色器執行完成後,並且所有的測試都通過之後,這個混合方程(blend equation)才會應用到片元顏色輸出與當前顏色緩衝中的值(當前片段之前儲存的之前片段的顏色)上。源顏色和目標顏色將會由opengl自動設定,但源因子和目標因子的值可以由我們來決定。先來看乙個簡單的例子:

設定混合因⼦子,需要⽤用到glblendfun函式。

glblendfunc(glenum sfactor, glenum dfactor)

比如上面的例子我們使用源顏色向量的alpha作為源因子,使用1-alpha作為目標因子。對應一下的glblendfun。

glblendfunc(gl_src_alpha, gl_one_minus_src_alpha);複製**
也可以使用glblendfuncseparate為rgb和alpha通道分別設定不同的選項。比如:

glblendfuncseparate(gl_src_alpha, gl_one_minus_src_alpha, gl_one, gl_zero);複製**

這個函式和我們之前設定的那樣設定了rgb分量,但這樣只能讓最終的alpha分量被源顏色向量的alpha值所影響到。

opengl甚至給了我們更多的靈活性,允許我們改變方程中源和目標部分的運算子。當前源和目標是相加的,但如果願意的話,我們也可以讓它們相減。glblendequation(glenum mode)允許我們設定運算子,它提供了三個選項:

入門第六課 Python補充

1 定義乙個變數並賦值 a 10 b i wanna sleep.注意 每行只寫一 段 則 末尾不用寫結束的符號,直接回車即可 這段 建立了a和b兩個變數。也可以這樣寫 a 10 b i wanna sleep.兩段 寫在一行,中間用分號隔開。不建議初學者這樣書寫,看到別人這樣寫能夠讀懂即可 還可以...

第六課 字型

a.字型系列 font family times new roman times,serif b.字型樣式 font style normal 正常 正常顯示文字 font style italic 斜體 以斜體字顯示的文字 font style oblique 傾斜的文字 文字向一邊傾斜 和斜體非...

第六課 列表

序列是python中最基本的 種資料結構。序列 於儲存 組有序的資料,所有的資料在序列當中都有 個唯 的位置 索引 並且序列中的資料會按照新增的順序來分配索引。資料結構指計算機中資料儲存的 式。python 基礎教程 第二版 對序列的定義為 資料結構。資料結構是通過某種方式 例如對元素進行編號 組織...