OpenGL 融合和透明

2021-08-04 09:37:51 字數 1578 閱讀 3937

opengl 融合和透明

前言:上午一直處於渾噩狀態,刷一下四個小時就沒了。就這樣看著電腦,「思考人生」!

1.opengl顏色的融合

opengl融合是一種基本的圖形影象處理技術。所謂融合處理,實際上是通過兩種顏色的混合(blending)來完成特殊顏色的繪製或透明物體的繪製;說白了就是兩種顏色進行疊合,產生一種新顏色。

在運用深度快取時,為了產生更加自然效果,通常是前面的物體遮住後面的物體來顯示。當需要看到後面的物體時,或者停用深度快取,繪製後面的物體;或者是前面的物體變成部分透明。

基於以上思路,融合至少有兩種:

一種是遮蔽掉深度快取的記憶,完成繪製後面的物體;另一種是利用顏色的透明方法;

融合效果通過繪製顏色體現,例如我在繪製水面顏色時,使用:

glcolor4f(0.0f,0.5f,1.0f,0.3f);
前三個引數代表顏色,最後一位是alpha值;值越大,物體越不透明,範圍在[0.0,1.0]之間。

啟動和關閉融合:

glenable(gl_blend);

gldisable(gl_blend);

融合操作方法函式:

void glblendfunc(glenum s,glenum d);

glenum s:定義將要繪製的物體顏色在最後結果中所佔比例,稱為源因子;

glenum d:定義將已經並且覆蓋的繪製物體顏色在最後結果中所佔比例,稱為目的因子。

下面附上,我今天繪製一些**:

繪製水面函式:

void cstepinglview::drawwater(void)

繪製函式:

void cstepinglview::drawscene(void)

程式執行截圖:

2.複雜的透明

這部分我也不太懂,暫時用不到;以後有時間在細談,只做了乙個簡單的例子,可以把水壺實現部分透明:

附上**:

void cstepinglview::drawscene(void)

恩,大概就是這樣,我把水面暫時遮蔽了,可以看到這樣的效果,有興趣的同學可以再研究:

OpenGL深度測試及融合

在專案中遇到透明物體融合 blender 問題 如下圖 原因是處於後邊的透明如果在後繪製的情況下,會被深度測試無情的丟棄,因此重新梳理了一下深度測試和融合關係。用我自己的表述方式總結了此技術博文。深度測試 depth testing 深度測試是在片段著色器之後進行的,當深度測試開啟後,opengl會...

OpenGL繪製半透明物體

一 使用混合來實現半透明效果 混合是什麼呢?混合就是把兩種顏色混在一起。具體一點,就是把某一畫素位置原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。假設我們需要繪製這樣乙個場景 透過紅色的玻璃去看綠色的物體,那麼可以先繪製綠色的物體,再繪製紅色玻璃。在繪製紅色玻璃的時候,利用...

OpenGL繪製半透明物體技巧

一 使用混合來實現半透明效果 混合是什麼呢?混合就是把兩種顏色混在一起。具體一點,就是把某一畫素位置原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。假設我們需要繪製這樣乙個場景 透過紅色的玻璃去看綠色的物體,那麼可以先繪製綠色的物體,再繪製紅色玻璃。在繪製紅色玻璃的時候,利用...