Рисунок Vertex от OpenGL VBO & amp; Цвет разделенный класс

Я хочу создать оболочку для упрощения чертежей OpenGL, поэтому я создаю этот два класса:

class GLColor
{
public:
static const int COORDS_PER_COLOR = 4;
private:
GLfloat _rgba[COORDS_PER_COLOR];

public:
GLColor(int red = 0, int green = 0, int blue = 0, int alpha = 255);
GLColor(float red, float green, float blue, float alpha);
inline void setRed(int red) { _rgba[0] = red / 255.0; }
inline void setGreen(int green) { _rgba[1] = green / 255.0; }
inline void setBlue(int blue) { _rgba[2] = blue / 255.0; }
inline void setAlpha(int alpha) { _rgba[3] = alpha / 255.0; }
inline void setRed(GLfloat red) { _rgba[0] = red; }
inline void setGreen(GLfloat green) { _rgba[1] = green; }
inline void setBlue(GLfloat blue) { _rgba[2] = blue; }
inline void setAlpha(GLfloat alpha) { _rgba[3] = alpha; }

//---- operators
GLColor& operator=(const GLColor&);
friend std::ostream& operator<<(std::ostream&, const GLColor&);
};

class GLVertex
{
public:
static const int COORDS_PER_VERTEX = 3;
private:
GLfloat _vertex[COORDS_PER_VERTEX];
GLColor _color;

public:
GLVertex(GLfloat x = 0.0, GLfloat y = 0.0, GLfloat z = 0.0);
GLVertex(const GLColor c, GLfloat x = 0.0, GLfloat y = 0.0, GLfloat z = 0.0);
inline void setX(GLfloat x) { _vertex[0] = x; }
inline void setY(GLfloat y) { _vertex[1] = y; }
inline void setZ(GLfloat z) { _vertex[2] = z; }
inline void setGLColor(const GLColor c) { _color = c; }
inline GLColor getGLColor() { return _color; }

//---- operators
GLVertex& operator=(const GLVertex&);
friend std::ostream& operator<<(std::ostream&, const GLVertex&);
};

Я получаю коллекцию вершин (std :: vector), но не знаю, как это лучше всего нарисовать, я пытаюсь это:

GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(GLVertex),
&vertices.front(), GL_STATIC_DRAW);

glVertexAttribPointer(_coord, GLVertex::COORDS_PER_VERTEX,
GL_FLOAT, GL_FALSE,
sizeof(GLVertex), 0);
glEnableVertexAttribArray(_coord);

glVertexAttribPointer(_color, GLColor::COORDS_PER_COLOR,
GL_FLOAT, GL_FALSE, sizeof(GLVertex),
(GLvoid*) (sizeof(GLfloat) * GLVertex::COORDS_PER_VERTEX));
glEnableVertexAttribArray(_color);

glLineWidth(linewidth);
glDrawArrays(mode, 0, vertices.size());

glDisableVertexAttribArray(_coord);
glDisableVertexAttribArray(_color);

Заранее спасибо

-1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]