0

我将在我的openGL应用程序中使用颜色选择。我想在创建每个对象时为其分配一个唯一的颜色代码。我的问题是如何排列RGB颜色值。

我想要的是一个函数,它RGB为每次调用返回一个唯一的颜色,这样我就可以将它分配给对象。例如,第一个调用将返回一个RGBcolor (1, 0, 0),下一个将 have(2, 0, 0)等等,直到它返回(255, 255, 255)

所以我的问题是如何实现这个功能。我认为这个想法是使用排列,但我不知道如何开始。在 C++ 中是否已经实现了置换功能?

4

3 回答 3

8

请注意,RGB 值只是三个字节。您可以只使用简单的 int 值并从 1 (0x000001) 到 16777215 (0xffffff) 进行迭代。RGB 值可以通过以下公式检索:

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;
于 2013-04-04T06:40:52.017 回答
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

}
于 2013-04-04T06:41:26.273 回答
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 颜色的所有变化,然后将其随机化...

于 2013-04-04T06:45:10.463 回答