OpenGL: отправка цветовой структуры RGBA в glColor * () как один параметр? - PullRequest
0 голосов
/ 17 октября 2010

Есть ли способ отправить структуру, например:

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

напрямую в функцию glColor * () как один параметр? Сделал бы код приятнее.

Я мог бы создать собственную функцию и отдельно отправлять каждое значение R, G, B, A на glColor4f (), но это было бы не так уж и приятно. Поэтому я ищу способ отправить его наиболее оптимальным способом.

Ответы [ 3 ]

6 голосов
/ 17 октября 2010
COLOR color;
glColor4fv((GLfloat*) &color);

Обновление: Я бы не рекомендовал создавать встроенную функцию, однако вы можете использовать GLfloat в своей структуре, чтобы получить более понятное выражение. Используйте & color.r, чтобы избежать предупреждения компилятора.

struct COLOR {
  GLfloat r,g,b,a;
};
COLOR color;
glColor4fv(&color.r);
3 голосов
/ 17 октября 2010

Самый оптимальный способ отправки вершинных массивов - это Vertex Arrays, он также сделает ваш код более привлекательным, вы должны посмотреть.

0 голосов
/ 14 сентября 2013

, чтобы сделать код вызова glColor4fv проще,я предпочитаю писать небольшой класс для инкапсуляции значений цвета ииспользуйте перегрузку оператора для автоматического преобразования в число с плавающей точкой *.Пример:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...