所以我有一个名为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访问这些值。 但相反,我希望它们都在一个变量中,所以当我想访问它时,我可以调用蓝色变量。
答案 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);
}