在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...