我使用freeglut在屏幕上繪製某些形狀,並希望根據與每個對象相關的值調整它們的顏色。值範圍從0.0
到1.0
,我希望這些代表明亮的紅色到紫色,數字線性縮放可見光譜。如何遍歷RGB中可見光譜的顏色?
問題是,我需要用RGB顏色代碼(每個代碼爲0.0到1.0)表示這些代碼。是否有一些簡單的方法來實現這一點?
我使用freeglut在屏幕上繪製某些形狀,並希望根據與每個對象相關的值調整它們的顏色。值範圍從0.0
到1.0
,我希望這些代表明亮的紅色到紫色,數字線性縮放可見光譜。如何遍歷RGB中可見光譜的顏色?
問題是,我需要用RGB顏色代碼(每個代碼爲0.0到1.0)表示這些代碼。是否有一些簡單的方法來實現這一點?
感謝您的評論,我不知道HSV。我發現下面的在線:
void pSetHSV(float h, float s, float v) {
// H [0, 360] S and V [0.0, 1.0].
int i = (int)floor(h/60.0f) % 6;
float f = h/60.0f - floor(h/60.0f);
float p = v * (float)(1 - s);
float q = v * (float)(1 - s * f);
float t = v * (float)(1 - (1 - f) * s);
switch (i) {
case 0: glColor3f(v, t, p);
break;
case 1: glColor3f(q, v, p);
break;
case 2: glColor3f(p, v, t);
break;
case 3: glColor3f(p, q, v);
break;
case 4: glColor3f(t, p, v);
break;
case 5: glColor3f(v, p, q);
}
}
爲什麼不會正常的RGB空間工作?像http://www.astrouw.edu.pl/~jskowron/colors-x11/rgb.html? – prabindh
RGB是不是一個好的色彩空間中做到這一點我想看看在[HSL或HSV]工作(HTTP://en.wikipedia .org/wiki/HSL_and_HSV),它們有一個「色調」軸,然後在必要時轉換回RGB。 –
您可以使用HSL顏色輕鬆實現這一點,遍歷顏色通道並將其轉換爲RGB – Manu343726
您將遇到的主要問題是,RGB不能覆蓋大部分可見顏色空間。如果您真的想要表現整個可見光譜,則必須在廣色域色彩空間中工作,或者更好地在接觸色彩空間中工作。但要注意的是,* no *顯示設備在廣泛可用的是能夠代表所有可見的顏色;從技術上講,可以使用現有技術使用彩色濾光輪使用超過3種顏色的視頻投影儀。 – datenwolf