#include "ColorCube.h" void ColorCube::setup() { std::vector 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() { }