1. 程式人生 > >OpenGL中的Blend(混色)

OpenGL中的Blend(混色)

混色的概念

所謂的混色,就是將當前要繪製的物體的顏色和顏色緩衝區中已經繪製的顏色進行混合,最終決定了當前物體的顏色。
如下圖中,我們透過不透明的窗戶來看窗外的景色,這就是一種混色。

這裡寫圖片描述

透明的物體可以是完全透明的(讓所有的顏色都穿過),或者是半透明的(讓顏色穿過,同時也顯示自身的顏色)。
一個物體的透明度是通過它顏色的Alpha值來決定的。Alpha顏色值是顏色分量的第四個分量。
如果是不透明的物體,那麼其透明度就為0.0
比如上圖中的窗戶,玻璃部分的Alpha值為0.25(其在一般情況下是完全的紅色,但是有75%的透明度,能讓很大一部分的背景顏色穿過,讓它不是那麼紅了)。邊框的Alpha值為1.0(完全不透明)。

丟棄片段 discard

GLSL中的命令,一旦被呼叫,就會保證片段不會進一步被處理,就不會進入顏色緩衝。

啟用了混合,我們就不需要丟棄片段了。

混色在程式中的實現

啟用混色的命令。

glEnable(GL_BLEND);

啟用了混色之後,需要告訴OpenGL它該如何混合。

OpenGL中的混合是通過這個方程來實現的:

C ¯ r e s u l
t = C ¯ s o u r c e F s o u r c e + C ¯ d e s t i n a t i o n F d e s t i n a t i o n

  • C ¯ s o u r c e :源顏色向量。這是源自紋理的顏色向量。
  • C ¯ d e s t i n a t i o n :目標顏色向量。這是當前儲存在顏色緩衝中的顏色向量。
  • F s o u r c e :源因子值。指定了alpha值對源顏色的影響。
  • F d e s t i n a t i o n :目標因子值。指定了alpha值對目標顏色的影響。

通過函式glBlendFunc來設定源和目標因子。

glBlendFunc(GLenum Source_factor, GLenum Destination_factor);//源和目標因子

見下表,OpenGL為我們定義了很多個選項,常數顏色

選項
GL_ZERO 因子等於0
GL_ONE 因子等於1
GL_SRC_COLOR 因子等於源顏色向量 C ¯ s o u r c e
GL_ONE_MINUS_SRC_COLOR 因子等於 1 C ¯ s o u r c e
GL_DST_COLOR 因子等於目標顏色向量 C ¯ d e s t i n a t i o n
GL_ONE_MINUS_DST_COLOR 因子等於 1 C ¯ d e s t i n a t i o n
GL_SRC_ALPHA 因子等於 C ¯ s o u r c e 的alpha分量
GL_ONE_MINUS_SRC_ALPHA 因子等於1− C ¯ s o u r c e 的alpha分量
GL_DST_ALPHA 因子等於 C ¯ d e s t i n a t i o n 的alpha分量
GL_ONE_MINUS_DST_ALPHA 因子等於1- C ¯ d e s t i n a t i o n 的alpha分量
GL_CONSTANT_COLOR 因子等於常數顏色向量 C ¯ c o n s t a n t
GL_ONE_MINUS_CONSTANT_COLOR 因子等於 1 C ¯ c o n s t a n t
GL_CONSTANT_ALPHA 因子等於