OpenGL透明與混色效果

2021-09-08 13:05:40 字數 2589 閱讀 7328

在opengl中,物體透明技術通常被叫做混合(blending)

透明是物體(或物體的一部分)非純色而是混合色,這種顏色來自於不同濃度的自身顏色和它後面的物體顏色。

乙個有色玻璃窗就是一種透明物體,玻璃有自身的顏色,但是最終的顏色包含了所有玻璃後面的顏色。這也正是混合這名稱的出處,因為我們將多種(來自於不同物體)顏色混合為乙個顏色,透明使得我們可以看穿物體。

透明物體可以是完全透明(它使顏色完全穿透)或者半透明的(它使顏色穿透的同時也顯示自身顏色)。乙個物體的透明度,被定義為它的顏色的alpha值。alpha顏色值是乙個顏色向量的第四個元素,當alpha值是0.0時就表示物體是完全透明的,alpha值為0.5時表示物體的顏色由50%的自身的顏色和50%的後面的顏色組成。

我們之前所使用的紋理都是由3個顏色元素組成的:紅、綠、藍,但是有些紋理同樣有乙個內嵌的aloha通道,它為每個紋理畫素(texel)包含著乙個alpha值。這個alpha值告訴我們紋理的哪個部分有透明度,以及這個透明度有多少。

要使用opengl的混合功能,只需要呼叫:glenable(gl_blend);即可;要關閉opengl的混合功能,只需要呼叫:gldisable(gl_blend);即可。

為了在場景中增加光照,需要執行以下步驟:

設定乙個或多個光源,設定光源的有關屬性;

選擇一種光照模型;

設定物體的材質屬性及色彩的alpha色彩混合屬性值。

#include "

stdafx.h

"#include

#pragma comment(lib, "glut32.lib")

void

initialization()

; glfloat lightposition = ;

glblendfunc(gl_src_alpha, gl_one_minus_src_alpha);

//指定混合函式

glshademodel(gl_smooth);

glmaterialfv(gl_front, gl_specular, lightspecular);

glmaterialf(gl_front, gl_shininess,

100.0

); gllightfv(gl_light0, gl_position, lightposition);

glenable(gl_blend);

//啟用混合狀態

glenable(gl_lighting); //

啟用光照

glenable(gl_light0); //

開啟光源0

glenable(gl_depth_test); //

啟用深度檢測

glenable(gl_color_material);//

材質跟蹤當前繪圖色

}void ondisplay(void

) glpopmatrix();

//裝出

glpushmatrix();

glpopmatrix();

glpushmatrix();

gltranslatef(-1, -1, 4

); glcolor4f(

0.0f, 0.0f, 1.0f, 0.5

); glbegin(gl_quads);

//繪製四邊形

glvertex3f(0, 0, 0

); glvertex3f(

5, 0, 0

); glvertex3f(

5, 5, 0

); glvertex3f(

0, 5, 0

); glend();

glpopmatrix();

glpushmatrix();

glcolor4f(

0.0f, 1.0f, 1.0f, 0.5

); gltranslatef(-1, -1, 5

); glrotatef(

60, 0, 0, 1

); glbegin(gl_quads);

glvertex3f(

0, 0, 0

); glvertex3f(

5, 0, 0

); glvertex3f(

5, 5, 0

); glvertex3f(

0, 5, 0

); glend();

glpopmatrix();

glutswapbuffers();

}void onreshape(int w, int

h)

else

}glmatrixmode(gl_modelview);

}void main(int argc, char*ar**)

效果如下:

進一步了解opengl程式的光照與材質引數的設定方法,並能使用alpha透明度引數實現不同幾何物件的視覺色彩混合效果。

OpenGL 融合和透明

opengl 融合和透明 前言 上午一直處於渾噩狀態,刷一下四個小時就沒了。就這樣看著電腦,思考人生 1.opengl顏色的融合 opengl融合是一種基本的圖形影象處理技術。所謂融合處理,實際上是通過兩種顏色的混合 blending 來完成特殊顏色的繪製或透明物體的繪製 說白了就是兩種顏色進行疊合...

OpenGL繪製半透明物體

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

自學WPF 第三課透明與混色

wpf可是很好的設定空間與窗體透明,通過屬性opacity設定 屬性值介於0 1 窗體透明還需設定窗體的allowtransparency屬性為true 允許透明 以及windowstyle為none 窗體無邊框 示例如下圖 如下 設定滑鼠控制窗體移動事件 如下 c private double o...