在结构 C++ 中存储 RGB 值

Storing RGB values within a struct c++

所以我有一个名为 color 的结构,我的主要 objective 是为我的程序创建一个颜色托盘并通过单个变量而不是 RGB 值或三个不同的结构变量访问它们。

函数声明

WINGDIAPI void APIENTRY glColor3f(GLfloat red,GLfloat green,GLfloat blue);

struct color
{
    GLfloat r;
    GLfloat g;
    GLfloat b;

};
color blue={0.0,0.0,255.0};

glColor3f(blue);

我可以通过 blue.r、blue.g、blue.b 访问这些值。 但是我希望它们都在一个变量中,所以当我想访问它时,我可以调用变量 blue.

glColor3f 不会将您的 struct color 类型作为参数。所以你不能使用 glColor3f(blue).

但是,您可以像这样定义一个重载函数:

void glColor3f(struct color &c) {
  glColor3f(c.r, c.g, c.b);
}

您不能只将一个单个变量传递给glColor3f(),因为该函数有三个参数。

据说有一个类似的函数 glColor3fv() 需要三个颜色值的数组。这个函数只有一个单个参数,所以你只需要传递一个参数给它。

因此,为了与 glColor3fv() 和需要颜色 数组 的类似函数一起使用,我们实际上可以声明这样的类型...

using color3f = std::array<GLfloat, 3>;

... 可以这样使用:

color3f blue={0.0,0.0,255.0};
glColor3fv( blue.data() );

必须调用 data() 成员才能将 std::array 转换为指针。

为什么我不只是声明像 using color3f = GLfloat[3] 这样不需要调用 data() 成员的普通数组类型?因为普通数组有一些缺点,例如你不能像 blue2 = blue; 那样简单地将一个赋值给另一个。