2013-04-04 242 views
0

我將在我的openGL應用程序中使用顏色選擇。我想在創建時爲每個對象分配一個唯一的顏色代碼。我的問題是如何擁有RGB顏色值的排列組合。RGB顏色排列

我想要的是一個函數,它爲每個調用返回一個唯一的RGB顏色,所以我可以將它分配給該對象。例如,第一次通話將返回RGB顏色(1, 0, 0),下一個將會有(2, 0, 0)依此類推,直到它將返回(255, 255, 255)

所以我的問題是如何實現該功能。我認爲這個想法是使用排列,但我不知道如何開始。在C++中是否有已經實現的排列函數?

回答

8

請注意,RGB值只是三個字節。您可以使用簡單的int值並從1(0x000001)到16777215(0xffffff)進行迭代。 RGB值可以通過以下公式retreived:

unsigned char R = color % 256; 
unsigned char G = (color/256) % 256; 
unsigned char B = (color/65536) % 256; 

unsigned char R = (color & 0xff); 
unsigned char G = (color & 0xff00) >> 8; 
unsigned char B = (color & 0xff0000) >> 16; 
+0

而第二個公式,如果沒有被編譯器優化,則要快得多。 – Dariusz 2013-04-04 06:43:41

1

你可以試試這個:

colour function() 
{ 
static int r=-1,g=0,b=0 ; 
r++; 
if(r == 256) 
{ 
    r=0; 
    g++ 
    if(g == 256) 
    { 
     g=0; 
     b++; 
    } 
} 

if(r == 255 && g==255 && b==255) 
r=g=b=0; 

    // return colour form by r,g and b combination 

} 
0

你可以使用:

rgbArray[255][3]; 
for (int r = 0; r < 255; ++r) 
    rgbArray[r][0] = r; 

numSwaps = 100; 
for (int i = 0; i < numSwaps; ++i) 
{ 
a = rand()%255; 
b = rand()%255; 
swap(rgbArray[a], rgbArray[b]); 
} 
當然

你可以擴展它來保存所有內容RGB顏色的變化,然後隨機...

+0

我沒有看到隨機化的要求。 「排列」聽起來很直截了當。 – 2013-04-04 06:46:02