tft每日頭條

 > 生活

 > opengl畫面數據

opengl畫面數據

生活 更新时间:2025-01-06 18:26:38
案例引入

首先我們通過如下代碼構建兩個圖層,它們的顔色和透明度分别為紅色、0.6和藍色、0.6,并且讓它們的部分區域重疊在一起。

UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(20, 100, 150, 100)]; redView.backgroundColor = [UIColor redColor]; redView.alpha = 0.6; [self.view addSubview:redView]; UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 150, 100)]; blueView.backgroundColor = [UIColor blueColor]; blueView.alpha = 0.6; [self.view addSubview:blueView];

效果如下:

opengl畫面數據(OpenGL顔色混合)1

C 音視頻開發學習資料:點擊領取→音視頻開發(資料文檔 視頻教程 面試題)(FFmpeg WebRTC RTMP RTSP HLS RTP)

顔色混合

我們發現在redView和blueView重疊的部分,顔色發生了變化,顯示的顔色即不是紅色也不是藍色,而是紅色和藍色混合後的顔色。這種現象我們稱之為“顔色混合”。

那麼在OpenGL中如何實現顔色混合呢?

調用如下代碼,打開顔色混合狀态:

gl_Enable(GLBLEND);

調用如下代碼,設置顔色混合因子:

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

用完後,記得調用如下函數關閉:

glDisable(BL_BLEND);

通過如上三句代碼我們就能夠在OpenGL中使用顔色混合了。

混合原理

目标顔色:已經存儲在顔色緩沖區的顔色值; 源顔色:将要進入顔色緩沖區的顔色值。

OpenGL默認情況下的顔色混合公式

Cf = (Cs * S) (Cd * D);

Cf:混合後的顔色值

Cs:源顔色

Cd:目标顔色

S:源混合因子

D:目标混合因子

其中,Cs和Cd是顔色值,我們無法設置;S和D是對應的混合因子,我們可以通過以下函數設置:

glBlendFunc(GLenum S,GLenum D);

其中S和D的取值如下圖:

opengl畫面數據(OpenGL顔色混合)2

表中R、G、B、A分别表示紅、綠、藍、透明度;S、D分别表示源、目标;C表示常量顔色。

C 音視頻開發學習資料:點擊領取→音視頻開發(資料文檔 視頻教程 面試題)(FFmpeg WebRTC RTMP RTSP HLS RTP)

opengl畫面數據(OpenGL顔色混合)3

上圖是OpenGL下顔色混合的默認公式的解釋,其實就是簡單的加減乘除運算。在OpenGL下,可以使用函數:

glbBlendEquation(Glenum mode);

可用的混合公式如下:

opengl畫面數據(OpenGL顔色混合)4

還有常量混合顔色,默認是黑色(0.0f,0.0f,0.0f,1.0f);但也可以通過下面的公式設置

void glBlendColor(GLclampf red,GLclampf green,GLclampf blue, GLclampf alpha);

總結:

一般我們隻需要使用OpenGL默認的公式就已經足夠了,基本不會去修改混合公式,使用最開始介紹的三個函數開啟顔色混合就能滿足開發中的需求了。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved