所以我有一个名为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/