102 lines
2.1 KiB
C++
102 lines
2.1 KiB
C++
#include "ColorCube.h"
|
|
|
|
void ColorCube::setup()
|
|
{
|
|
std::vector<glm::vec3> cube_vertices =
|
|
{ { -1.0, -1.0, 1.0},
|
|
{ 1.0, -1.0, 1.0},
|
|
{ 1.0, 1.0, 1.0},
|
|
{ -1.0, 1.0, 1.0},
|
|
{ -1.0, -1.0, -1.0},
|
|
{ 1.0, -1.0, -1.0},
|
|
{ 1.0, 1.0, -1.0},
|
|
{ -1.0, 1.0, -1.0} };
|
|
|
|
GLfloat cube_colors[] = {
|
|
// front colors
|
|
1.0, 0.0, 0.0,
|
|
0.0, 1.0, 0.0,
|
|
0.0, 0.0, 1.0,
|
|
1.0, 1.0, 1.0,
|
|
// back colors
|
|
1.0, 0.0, 0.0,
|
|
0.0, 1.0, 0.0,
|
|
0.0, 0.0, 1.0,
|
|
1.0, 1.0, 1.0,
|
|
};
|
|
|
|
GLushort cube_elements[] = {
|
|
0, 1, 2, 2, 3, 0, 1, 5, 6,
|
|
6, 2, 1, 7, 6, 5, 5, 4, 7,
|
|
4, 0, 3, 3, 7, 4, 4, 5, 1,
|
|
1, 0, 4, 3, 2, 6, 6, 7, 3,
|
|
};
|
|
|
|
|
|
glGenVertexArrays(1, &_vaoHandle);
|
|
glBindVertexArray(_vaoHandle);
|
|
|
|
glGenBuffers(1, &_vbo_vertices);
|
|
glBindBuffer(GL_ARRAY_BUFFER, _vbo_vertices);
|
|
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * cube_vertices.size() * 3, cube_vertices.data(), GL_STATIC_DRAW);
|
|
|
|
glVertexAttribPointer(
|
|
0, //attr number = 0
|
|
3,
|
|
GL_FLOAT,
|
|
GL_FALSE,
|
|
0,
|
|
(void*)0);
|
|
glEnableVertexAttribArray(0); //attr number = 0
|
|
|
|
|
|
glGenBuffers(1, &_vbo_colors);
|
|
glBindBuffer(GL_ARRAY_BUFFER, _vbo_colors);
|
|
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 24, cube_colors, GL_STATIC_DRAW);
|
|
|
|
glVertexAttribPointer(
|
|
1,
|
|
3,
|
|
GL_FLOAT,
|
|
GL_FALSE,
|
|
0,
|
|
(void*)0);
|
|
glEnableVertexAttribArray(1);
|
|
|
|
glGenBuffers(1, &_iboHandle);
|
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _iboHandle);
|
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(cube_elements), cube_elements, GL_STATIC_DRAW);
|
|
|
|
glBindVertexArray(0);
|
|
}
|
|
|
|
ColorCube::ColorCube()
|
|
{
|
|
setup();
|
|
}
|
|
|
|
|
|
void ColorCube::draw(ShaderProgram *shader, glm::mat4x4 pv)
|
|
{
|
|
_model.glPushMatrix();
|
|
effectTransformations();
|
|
glBindVertexArray(_vaoHandle);
|
|
int size;
|
|
glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);
|
|
glm::mat4 mvpMatrix = pv * _model.getMatrix();
|
|
glUniformMatrix4fv(shader->uniform("mvp"), 1, GL_FALSE, glm::value_ptr(mvpMatrix));
|
|
glDrawElements(GL_TRIANGLES, size / sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
|
|
|
|
_model.glPopMatrix();
|
|
|
|
}
|
|
|
|
DrawableType ColorCube::getType()
|
|
{
|
|
return DrawableType::COLOR_CUBE;
|
|
}
|
|
|
|
ColorCube::~ColorCube()
|
|
{
|
|
}
|