在结构 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;
那样简单地将一个赋值给另一个。
所以我有一个名为 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;
那样简单地将一个赋值给另一个。