所以我有一个名为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访问这些值。
但是相反,我希望它们全部集中在一个变量中,因此当我要访问它时,我只能调用变量blue。

最佳答案

您不能仅将单个变量传递给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;

关于c++ - 在struct C++中存储RGB值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44830679/

10-14 02:23