有没有办法发送像这样的结构:
struct COLOR {
float r, g, b, a;
};
直接将glColor *()函数作为一个参数?会使代码更好。
我可以创建自己的函数并将每个R,G,B,A值分别发送到glColor4f(),但这不会那么好。因此,我希望尽可能以最佳方式发送它。
答案 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);