使用openGL中的数字选择一种颜色

时间:2014-04-06 12:43:10

标签: opengl colors

你知道glColor3f(),它包含红色绿色和蓝色值。我正在开发一个简单的程序,可以让你选择一种颜色,所以我不知道如何设置一组RGB颜色值来进行回调。例如,

int red = (1,0,0);
glColor3f(red);

显然,这有一个错误,所以我尝试了其他一些方法来使其工作     int [] red = {1,0,0}; 它仍然没有奏效。你能给我一些建议吗?

更新#1: 我做了另一个程序只是测试。第一个代码行应该是全局状态。

GLfloat color[3] = {1,0,0};

然后颜色应该由rand()改变如下:

int r1 = rand() % 100;
if(r1 < 50)
    color = {0,1,0};
else
    color = {0,0,1};

glColor3fv(color);

1 个答案:

答案 0 :(得分:2)

首先:了解C的正确语法,因为这个

int red = (1,0,0);

无效C.(C不知道元组类型)。类型也很重要。

您可以使用GLfloat数组并将其传递给glColor3fv(如果您想使用整数,则必须使用glColor3i[v]

GLfloat const red[3] = {1,0,0};
glColor3fv(red);

但这并不是很有用,因为你通常不想人为地限制用户的选择。只需为它们提供一个颜色选择小部件,它会返回单个颜色值,通常在struct中并将其传递给OpenGL

struct color {
    enum {Color_sRGB, Color_HSV, Color_Lab, /* other color spaces */} type;
    union {
        struct { GLfloat r,g,b};
        struct { GLfloat h,s,v};
        struct { GLfloat l,a,b};
        /* other color spaces */
    };
};

/* defined somewhere else, converts a color to RGB color space */
void to_rgb(GLfloat rgb[3], color const *c);

void SetColor(color const *c) 
{
    GLfloat rgb[3];
    to_rgb(rgb, c);
    glColor3fv(rgb);
}

由于评论而更新

要从一组颜色中随机选择,请使用:

GLfloat const green[] = {0.f, 1.f, 0.f};
GLfloat const blue[]  = {0.f, 0.f, 1.f};

在C数组中有一个有趣的属性,它们的R值实际上是指向它们的第一个元素的指针。因此,对于所有实际的方法,无论数组作为参数,您都可以使用指针。

GLfloat const *color; /* a pointer, not an array */
int r1 = rand() % 100;
if(r1 < 50)
    color = green;
else
    color = blue;

glColor3fv(color);