在结构c ++中存储RGB值

时间:2017-06-29 16:36:15

标签: c++ opengl rgb

所以我有一个名为color的结构我的主要目标是为我的程序创建一个颜色托盘,并通过一个变量而不是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访问这些值。 但相反,我希望它们都在一个变量中,所以当我想访问它时,我可以调用蓝色变量。

2 个答案:

答案 0 :(得分:3)

您只能将单个变量传递给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;那样简单地分配一个。

答案 1 :(得分:2)

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

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

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