OpenGL:将RGBA颜色结构发送到glColor *()作为一个参数?

时间:2010-10-17 19:26:44

标签: c++ opengl

有没有办法发送像这样的结构:

struct COLOR {
    float r, g, b, a;
};

直接将glColor *()函数作为一个参数?会使代码更好。

我可以创建自己的函数并将每个R,G,B,A值分别发送到glColor4f(),但这不会那么好。因此,我希望尽可能以最佳方式发送它。

3 个答案:

答案 0 :(得分:6)

COLOR color;
glColor4fv((GLfloat*) &color);

更新: 我不建议创建内联函数,但是,您可以在结构中使用GLfloat来使表达式更清晰。使用& color.r来避免编译器警告。

struct COLOR {
  GLfloat r,g,b,a;
};
COLOR color;
glColor4fv(&color.r);

答案 1 :(得分:3)

发送顶点数据的最佳方式是Vertex Arrays,它也会让你的代码看起来更漂亮,你应该看看。

答案 2 :(得分:0)

使调用glColor4fv的代码更简单,
我更喜欢写一个小类来封装颜色值和
使用运算符重载来自动转换为float *。
例如:

class MyClr
{
public:
MyClr(float r, float g, float b, float a)
{
    m_dat[0] = r;
    m_dat[1] = g;
    m_dat[2] = b;
    m_dat[3] = a;
}
// if needed, we can 
// overload constructors to take other types of input like 0-255 RGBA vals
// and convert to 0.0f to 1.0f values

// wherever a float* is needed for color, this will kick-in
operator const float* ()const { return (float*)m_dat;} 

private:
float m_dat[4];
};

// usage
MyClr clrYellow (1.0f, 1.0f, 0.0f, 1.0f);

// to send to OpenGL
glColor4fv(clrYellow);