你知道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);
答案 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);