日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

颜色混合理解

發布時間:2023/12/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 颜色混合理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、概念:
“混合”是指兩種顏色的疊加方式。在新圖片將要渲染畫到屏幕上的時候,將用在新圖片中的紅、綠、藍和透明度信息(RGBA),與屏幕上已經存在的圖片顏色信息相融合。(只會改變新圖片的大小范圍內)
“源顏色”:即新圖片的顏色碼(因為就是以新圖片為對象,進行渲染)
”目標顏色“:屏幕上已存在的圖片顏色(新圖片的大小范圍內的屏幕顏色,其他范圍不受影響)
OpenGL會把源顏色和目標顏色各自取出,并乘以一個系數
“源因子”:源顏色乘以的系數稱為“源因子”
“目標因子”:目標顏色乘以的系數稱為“目標因子”
2、計算公式
假設:顏色信息的四個分量(紅,綠,藍,透明度)
(1)“源顏色” :(Rs, Gs, Bs, As)
(2)“目標顏色”:(Rd, Gd, Bd, Ad)
(3)“源因子” :(Sr, Sg, Sb, Sa)
(4)“目標因子”:(Dr, Dg, Db, Da)
那么混合產生的新顏色可以表示為:
(RsSr + RdDr , GsSg + GdDg , BsSb + BdDb , AsSa + AdDa)
常見的混合因子
GL_ZERO 全部不用 (0 , 0 , 0 , 0)
GL_ONE 全部使用 (1 , 1 , 1 , 1)
GL_SRC_COLOR 使用源顏色 (Rs , Gs , Bs , As)
GL_DST_COLOR 使用目標顏色 (Rd , Gd , Bd , Ad)
GL_ONE_MINUS_SRC_COLOR 減去源顏色 (1-Rs , 1-Gs , 1-Bs , 1-As)
GL_ONE_MINUS_DST_COLOR 減去目標顏色 (1-Rd , 1-Gd , 1-Bd , 1-Ad)
GL_SRC_ALPHA 使用源顏色的透明度 (As , As , As , As)
GL_DST_ALPHA 使用目標顏色的透明度 (Ad , Ad , Ad , Ad)
GL_ONE_MINUS_SRC_ALPHA 減去源顏色的透明度 (1-As , 1-As , 1-As , 1-As)
GL_ONE_MINUS_DST_ALPHA 減去目標顏色的透明度 (1-Ad , 1-Ad , 1-Ad , 1-Ad)

使用方法
(平時使用需要加畫布,不然背景也會進行混合)
local node = D.imgc(“g/button/btn_play.png”):to(layer)
node:setBlendFunc(”源因子“,“目標因子”)
默認的混合模式
node:setBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_ALPHA)
源顏色:全部使用
目標因子:減去源顏色的透明度
我們圖片,才會不顯示透明
利用透明度會有特殊的效果:

通常使用的混合模式
node:setBlendFunc(GL_ONE,GL_ONE)

可以進行顏色的混合(可以達到紅+綠=黃的效果)
缺陷(顏料混合)
(技術難點,RGB轉CMYK,實現不太好,如果成功,可以“為所欲為”)
如:上圖所示(最終混合為白色,這符合光的混合但不符合顏料的混合)
由于光的顏色是RGBA碼,顏料的CMYK碼
首先將CMYK轉成RGBA碼,在屏幕呈現出來(保存CMYK),進行CMYK碼的疊加運算(C = C1+ C2, M = m1 + m2 等,越值處理一下),在建CMYK呈現出來達到顏料的混合效果
青 + 黃變成綠

三基色:疊加變成黑色,不在是白色

CMYK轉RGB的公式
function M:cmytorgb(c,m,y,k)
local node = {}
node.r = 255 (1 - c) (1 - k)
node.g = 255 (1 - m) (1 - k)
node.b = 255 (1 - y) (1 - k)
return cc.c3b(node.r,node.g,node.b)
end
rgb碼轉CMYK碼不太行
function M:rgbtocmy(r,g,b)
local node = {}
local R = r / 255
local G = g / 255
local B = b / 255
local K = 1 - math.max(R,G,B)
node.c = (1 - R - K)/(1 - K)
node.m = (1 - G - K)/(1 - K)
node.y = (1 - B - K)/(1 - K)
node.k = K
return node
end

總結

以上是生活随笔為你收集整理的颜色混合理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。