Я хочу создать оболочку для упрощения чертежей 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);
Заранее спасибо
Задача ещё не решена.
Других решений пока нет …