公式詳解 參考文獻 :
向作者白哦大十二分的敬意。
因為是做遊戲的,所以才會有這方面的需求,我們的引擎採用的指令碼是 lua, 我是通過lua將資料轉換後為遊戲材質屬性賦值,因為下面的指令碼執行速率並不是太高,所以就先在指令碼中實現,方便除錯。
--[[
* rgb顏色模型轉化為hsv的顏色模型資料
* h,s,v 色相,飽和度, 色調(明度)
* 返回值 hsvvalue h(0-360),s(0-255) v(0-255)
* @param colorrgb 顏色數值, 數值部分0-255
]]function _g.rgbconverttohsv(colorrgb)
local r,g,b = colorrgb.r, colorrgb.g, colorrgb.b;
local h,s,v = 0,0,0;
local max1 = math.max(r, math.max(g,b));
local min1 = math.min(r, math.min(g,b));
if max1 == min1 then
h=0;
else
if r == max1 then
if g >= b then
h = 60 * (g-b) / (max1-min1);
else
h = 60 * (g-b) / (max1-min1) + 360;
end
endif g == max1 then
h = 60 * (b-r)/(max1-min1) + 120;
endif b == max1 then
h = 60 * (r-g)/(max1-min1) + 240;
endend
if max1 == 0 then
s = 0;
else
s = (1- min1 / max1) * 255;
endv = max1;
local hsvvalue = ;
return hsvvalue;
end--[[
* hsv to rgb
* h,s,v 色相,飽和度,明度(色調)
* 返回值 colorvalue 顏色值 (0-1)規範化數值
* @paream colorhsv 顏色數值, h(0-360) s(0-255) v(0-255)
]]function hsvconverttorgb( colorhsv )
local cr,cg,cb = 0,0,0;
colorhsv.s = colorhsv.s /255;
colorhsv.v = colorhsv.v / 255;
if( colorhsv.s == 0 ) then
cr,cg,cb = colorhsv.v, colorhsv.v, colorhsv.v;
else
colorhsv.h = colorhsv.h /60;
local i = math.floor(colorhsv.h);
local f = colorhsv.h - i;
local a = colorhsv.v * ( 1 - colorhsv.s );
local b = colorhsv.v * ( 1 - colorhsv.s * f );
local c = colorhsv.v * ( 1 - colorhsv.s * (1 - f ) );
if i== 0 then
cr,cg,cb = colorhsv.v, c, a;
elseif i == 1 then
cr,cg,cb = b, colorhsv.v, a;
elseif i == 2 then
cr,cg,cb = a, colorhsv.v, c;
elseif i == 3 then
cr,cg,cb = a, b, colorhsv.v;
elseif i == 4 then
cr,cg,cb = c, a, colorhsv.v;
else
cr,cg,cb = colorhsv.v, a, b;
endend
local rgbvalue = ;
return rgbvalue;
end
--[[
*hsl顏色值轉換為rgb.
* h, s, l 色相,飽和度,亮度
* h(0-360) s(0-255) l(0-255);
* 返回的 color 數值 [0,1]
* @param hslvalue
]]function hslconverttorgb(hslvalue)
local h,s,l = hslvalue.h, hslvalue.s, hslvalue.l;
h = h/360;
s = s/255;
l = l/255;
local r, g, b;
if s == 0 then
r, g, b = l, l, l;
else
local hue2rgb = function(p, q, t)
if t < 0 then t = t +1; end
if t > 1 then t = t -1; end
if t < 1/6 then return p + (q - p) * 6 * t; end
if t < 1/2 then return q; end
if t < 2/3 then return p + (q - p) * (2/3 - t) * 6; end
return p;
endlocal q = l < 0.5 and l * (1 + s) or l + s - l * s;
local p = 2 * l - q;
r = hue2rgb(p, q, h + 1/3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1/3);
endlocal rgbvalue = ;
return rgbvalue;
end
HSV顏色模型
hsv是指hue 色相 saturation 飽和度 和value 亮度 色調 或 明度 hsv模型的三維表示從rgb立方體演化而來。設想從rgb沿立方體對角線的白色頂點向黑色頂點觀察,就可以看到立方體的六邊形外形。六邊形邊界表示色彩,水平軸表示純度,明度沿垂直軸測量。hsv六稜錐 h引數表示色彩資...
HSV顏色模型
hsv顏色模型 h 色調 0 360 決定顯示什麼顏色 s 飽和度 0.0 1.0 v 亮度 0 1 圓錐的頂面中心處 s 0,v 1,h無定義,代表白色。在圓錐的頂點 即原點 處,v 0,h和s無定義,代表黑色。在圓錐頂面的圓周上的顏色,v 1,s 1,這種顏色是純色。色調h 用角度度量,取值範圍...
RGB HSV和HSL顏色空間
詳細資訊click 侵刪rgb 是我們接觸最多的顏色空間,由三個通道表示一幅影象,分別為紅色 綠色 g 和藍色 b 這三種顏色的不同組合可以形成幾乎所有的其他顏色。rgb 顏色空間是影象處理中最基本 最常用 面向硬體的顏色空間,比較容易理解。rgb 顏色空間利用三個顏色分量的線性組合來表示顏色,任何...