OpenGL透明效果原始碼 VS2015 x64

2021-08-21 05:13:09 字數 2532 閱讀 4618

data 2018/7/4  by wjb

知識點:

blend 混合是將源色和目標色以某種方式混合生成特效的技術。混合常用來繪製透明或半透明的物體。在混合中起關鍵作用的α值實際上是將源色和目標色按給定比率進行混合,以達到不同程度的透明。α值為0則完全透明,α值為1則完全不透明。混合操作只能在rgba模式下進行,顏色索引模式下無法指定α值。物體的繪製順序會影響到opengl的混合處理。

glenable( gl_blend );   // 啟用混合

gldisable( gl_blend );  // 禁用關閉混合

glblendfunc( glenum sfactor , glenum dfactor );         // 混合函式

sfactor 源混合因子      dfactor 目標混合因子

glblendfunc( gl_src_alpha , gl_one_minus_src_alpha ); // 是最常使用的

若源色為 ( 1.0 , 0.9 , 0.7 , 0.8 )

源色使用 gl_src_alpha

即 0.8*1.0 , 0.8*0.9 , 0.8*0.8 , 0.8*0.7

結果為 0.8 , 0.72 , 0.64 , 0.56

目標色為 ( 0.6 , 0.5 , 0.4 , 0.3 )

目標色使用gl_one_minus_src_alpha

即 1 - 0.8 = 0.2

0.2*0.6 , 0.2*0.5 , 0.2*0.4 , 0.2*0.3

結果為 0.12 , 0.1 , 0.08 , 0.06

由此而見,使用這個混合函式,源色的α值決定了結果顏色的百分比。

這裡源色的α值為0.8,即結果顏色中源色佔80%,目標色佔20%。

特別說明:如果二維資料,位置點z值為0,或者沒有z值,則不需要開始深度測試

#include "stdafx.h"

#include "glut.h"

#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* argv)

// blenddeom.cpp : 定義控制台應用程式的入口點。

效果圖:

OpenGL透明與混色效果

在opengl中,物體透明技術通常被叫做混合 blending 透明是物體 或物體的一部分 非純色而是混合色,這種顏色來自於不同濃度的自身顏色和它後面的物體顏色。乙個有色玻璃窗就是一種透明物體,玻璃有自身的顏色,但是最終的顏色包含了所有玻璃後面的顏色。這也正是混合這名稱的出處,因為我們將多種 來自於...

vs檢視原始碼行數

參考 需要檢視當前工程中原始碼的行數,按ctrl shift f find in files 勾選 正規表示式 然後輸入 搜尋內容 b b 開頭和 開頭或者空行都不計入 量。如果需要只統計 檔案的 量,可以 選擇 查詢檔案的型別,比如什麼 xml,resx 可以不檢查,只查 cs,c,h 搜尋出來以...

抖音時鐘效果原始碼

找所有的東西標籤函式 let findsiblings tag return sb 去掉所有兄弟的類 let removesiblingclass tag 初始化月份函式 let initmonth 初始化日期 let initdate 初始化小時,分鐘,秒 let inithour span.in...