2014-01-05 23 views
0

我使用freeglut在屏幕上繪製某些形狀,並希望根據與每個對象相關的值調整它們的顏色。值範圍從0.01.0,我希望這些代表明亮的紅色到紫色,數字線性縮放可見光譜。如何遍歷RGB中可見光譜的顏色?

問題是,我需要用RGB顏色代碼(每個代碼爲0.0到1.0)表示這些代碼。是否有一些簡單的方法來實現這一點?

+3

RGB是不是一個好的色彩空間中做到這一點我想看看在[HSL或HSV]工作(HTTP://en.wikipedia .org/wiki/HSL_and_HSV),它們有一個「色調」軸,然後在必要時轉換回RGB。 –

+0

您可以使用HSL顏色輕鬆實現這一點,遍歷顏色通道並將其轉換爲RGB – Manu343726

+0

您將遇到的主要問題是,RGB不能覆蓋大部分可見顏色空間。如果您真的想要表現整個可見光譜,則必須在廣色域色彩空間中工作,或者更好地在接觸色彩空間中工作。但要注意的是,* no *顯示設備在廣泛可用的是能夠代表所有可見的顏色;從技術上講,可以使用現有技術使用彩色濾光輪使用超過3種顏色的視頻投影儀。 – datenwolf

回答

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); 
    } 
} 

來源:http://forum.openframeworks.cc/t/hsv-color-setting/770

+0

爲什麼不會正常的RGB空間工作?像http://www.astrouw.edu.pl/~jskowron/colors-x11/rgb.html? – prabindh