CubeColor can be spawned with IBO or VAO in preparation of lighthing application
This commit is contained in:
parent
0b6282a21b
commit
7e546f7d23
@ -1,6 +1,6 @@
|
||||
#include "ColorCube.h"
|
||||
|
||||
void ColorCube::setup()
|
||||
void ColorCube::iboSetup()
|
||||
{
|
||||
std::vector<glm::vec3> cube_vertices =
|
||||
{ { -1.0, -1.0, 1.0},
|
||||
@ -10,7 +10,7 @@ void ColorCube::setup()
|
||||
{ -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
|
||||
@ -70,9 +70,95 @@ void ColorCube::setup()
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
ColorCube::ColorCube()
|
||||
void ColorCube::vaoSetup()
|
||||
{
|
||||
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}, { 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}, { -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},
|
||||
{ -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}, { 1.0, 1.0, -1.0},
|
||||
{ 1.0, 1.0, -1.0}, { -1.0, 1.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,
|
||||
};
|
||||
|
||||
GLfloat cube_colors[] = {
|
||||
1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,
|
||||
0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,
|
||||
0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0,
|
||||
1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0,
|
||||
0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0,
|
||||
1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0,
|
||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
|
||||
1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0,
|
||||
0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
|
||||
1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0,
|
||||
0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
|
||||
};
|
||||
|
||||
GLfloat cube_colorss[] = {
|
||||
1.0, 0.0, 0.0, // 0
|
||||
0.0, 1.0, 0.0, // 1
|
||||
0.0, 0.0, 1.0, // 2
|
||||
1.0, 1.0, 1.0, // 3
|
||||
1.0, 0.0, 0.0, // 4
|
||||
0.0, 1.0, 0.0, // 5
|
||||
0.0, 0.0, 1.0, // 6
|
||||
1.0, 1.0, 1.0, // 7
|
||||
};
|
||||
|
||||
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) * cube_vertices.size() * 3, cube_colors, GL_STATIC_DRAW);
|
||||
|
||||
glVertexAttribPointer(
|
||||
1,
|
||||
3,
|
||||
GL_FLOAT,
|
||||
GL_FALSE,
|
||||
0,
|
||||
(void*)0);
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
ColorCube::ColorCube(bool usingIBO)
|
||||
{
|
||||
setup();
|
||||
ibo_used = usingIBO;
|
||||
if (usingIBO)
|
||||
iboSetup();
|
||||
else
|
||||
vaoSetup();
|
||||
}
|
||||
|
||||
|
||||
@ -85,7 +171,10 @@ void ColorCube::draw(ShaderProgram *shader, glm::mat4x4 pv)
|
||||
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);
|
||||
if (ibo_used)
|
||||
glDrawElements(GL_TRIANGLES, size / sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
|
||||
else
|
||||
glDrawArrays(GL_TRIANGLES, 0, 36);
|
||||
|
||||
_model.glPopMatrix();
|
||||
|
||||
|
||||
@ -12,10 +12,13 @@ private:
|
||||
GLuint _iboHandle;
|
||||
GLuint _vbo_vertices, _vbo_colors;
|
||||
|
||||
void setup();
|
||||
bool ibo_used;
|
||||
|
||||
void iboSetup();
|
||||
void vaoSetup();
|
||||
|
||||
public:
|
||||
ColorCube();
|
||||
ColorCube(bool usingIBO);
|
||||
|
||||
void draw(ShaderProgram *shader, glm::mat4x4 pv) override;
|
||||
DrawableType getType() override;
|
||||
|
||||
@ -36,14 +36,12 @@ glm::mat4x4 lookAt(glm::vec3 campos, glm::vec3 look, glm::vec3 up)
|
||||
|
||||
|
||||
MyGlWindow::MyGlWindow(int w, int h) :
|
||||
viewer(glm::vec3(5, 5, 5), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0), 45.0f, (w / (float)h)),
|
||||
_floor(50, 16)
|
||||
viewer(glm::vec3(5, 5, 5), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0), 45.0f, (w / (float)h))
|
||||
{
|
||||
m_width = w;
|
||||
m_height = h;
|
||||
|
||||
setup();
|
||||
setupCubeBuffer();
|
||||
}
|
||||
|
||||
MyGlWindow::~MyGlWindow()
|
||||
@ -61,99 +59,12 @@ void MyGlWindow::setup()
|
||||
{
|
||||
_shaderProgram = new ShaderProgram();
|
||||
_shaderProgram->initFromFiles("simple.vert", "simple.frag");
|
||||
|
||||
_static_drawables.emplace_back(new CheckeredFloor(50, 16));
|
||||
|
||||
_static_drawables.emplace_back(new WireCube());
|
||||
_static_drawables.back()->addTranslation(glm::vec4(0, 1.01, 0, 0));
|
||||
|
||||
_static_drawables.emplace_back(new WireCube());
|
||||
_static_drawables.back()->addTranslation(glm::vec4(0, 3.01, 0, 0));
|
||||
|
||||
_static_drawables.emplace_back(new WireCube());
|
||||
_static_drawables.back()->addTranslation(glm::vec4(0, 5.01, 0, 0));
|
||||
|
||||
_static_drawables.emplace_back(new WireCube());
|
||||
_static_drawables.back()->addTranslation(glm::vec4(0, 7.01, 0, 0));
|
||||
|
||||
_crane_boom.emplace_back(new WireCube());
|
||||
_crane_boom.back()->addTranslation(glm::vec4(0, 9.01, 0, 0));
|
||||
|
||||
_crane_boom.emplace_back(new WireCube());
|
||||
_crane_boom.back()->addTranslation(glm::vec4(-2, 9.01, 0, 0));
|
||||
|
||||
_crane_boom.emplace_back(new WireCube());
|
||||
_crane_boom.back()->addTranslation(glm::vec4(2, 9.01, 0, 0));
|
||||
|
||||
_crane_boom.emplace_back(new WireCube());
|
||||
_crane_boom.back()->addTranslation(glm::vec4(4, 9.01, 0, 0));
|
||||
|
||||
_crane_boom.emplace_back(new WireCube());
|
||||
_crane_boom.back()->addTranslation(glm::vec4(6, 9.01, 0, 0));
|
||||
|
||||
_crane_boom.push_back(new ColorCube());
|
||||
_crane_boom.back()->addTranslation(glm::vec4(8, 7.01, 0, 0));
|
||||
|
||||
_crane_boom.emplace_back(new WireCube());
|
||||
_crane_boom.back()->addTranslation(glm::vec4(8, 9.01, 0, 0));
|
||||
|
||||
_crane_boom.emplace_back(new LineSegment());
|
||||
_crane_boom.back()->addTranslation(glm::vec4(8, 8.01, 0, 0));
|
||||
}
|
||||
|
||||
void MyGlWindow::setupCubeBuffer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MyGlWindow::setupRectBuffer()
|
||||
{
|
||||
GLuint vbo_cube_vertices;
|
||||
|
||||
glGenVertexArrays(1, &_vaoHandle);
|
||||
glBindVertexArray(_vaoHandle);
|
||||
|
||||
vertexAttr* verts = new vertexAttr[6];
|
||||
verts[0].posX = -0.3f; verts[0].posY = 0.4f; verts[0].posZ = 0;
|
||||
verts[0].r = 1; verts[0].g = 0; verts[0].b = 0;
|
||||
|
||||
verts[1].posX = -0.3f; verts[1].posY = -0.4f; verts[1].posZ = 0;
|
||||
verts[1].r = 0; verts[1].g = 1; verts[1].b = 0;
|
||||
|
||||
verts[2].posX = 0.3f; verts[2].posY = -0.4f; verts[2].posZ = 0;
|
||||
verts[2].r = 0; verts[2].g = 0; verts[2].b = 1;
|
||||
|
||||
verts[3].posX = 0.3f; verts[3].posY = -0.4f; verts[3].posZ = 0;
|
||||
verts[3].r = 0; verts[3].g = 0; verts[3].b = 1;
|
||||
|
||||
verts[4].posX = 0.3f; verts[4].posY = 0.4f; verts[4].posZ = 0;
|
||||
verts[4].r = 0; verts[4].g = 1; verts[4].b = 0;
|
||||
|
||||
verts[5].posX = -0.3f; verts[5].posY = 0.4f; verts[5].posZ = 0;
|
||||
verts[5].r = 1; verts[5].g = 0; verts[5].b = 0;
|
||||
|
||||
|
||||
glGenBuffers(1, &vbo_cube_vertices);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_vertices);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexAttr) * 6, verts, GL_STATIC_DRAW);
|
||||
glVertexAttribPointer(
|
||||
0, //attr number = 0
|
||||
3,
|
||||
GL_FLOAT,
|
||||
GL_FALSE,
|
||||
sizeof(vertexAttr),
|
||||
(void*)0);
|
||||
glEnableVertexAttribArray(0); //attr number = 0
|
||||
|
||||
glVertexAttribPointer(
|
||||
1,
|
||||
3,
|
||||
GL_FLOAT,
|
||||
GL_FALSE,
|
||||
sizeof(vertexAttr),
|
||||
(void*)(sizeof(GLfloat) * 3));
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
glBindVertexArray(0);
|
||||
_static_drawables.push_back(new ColorCube(true));
|
||||
_static_drawables.back()->addTranslation(glm::vec4(-2, 1.1f, 0, 0));
|
||||
_static_drawables.push_back(new ColorCube(false));
|
||||
_static_drawables.back()->addTranslation(glm::vec4(2, 1.1f, 0, 0));
|
||||
}
|
||||
|
||||
void MyGlWindow::setViewFromBox(glm::vec3 &eye, glm::vec3 &look, glm::vec3 &up)
|
||||
@ -184,9 +95,7 @@ void MyGlWindow::draw()
|
||||
|
||||
glm::vec3 eye(viewer.getViewPoint().x, viewer.getViewPoint().y, viewer.getViewPoint().z);
|
||||
glm::vec3 look(viewer.getViewCenter().x, viewer.getViewCenter().y, viewer.getViewCenter().z);
|
||||
glm::vec3 up(viewer.getUpVector().x, viewer.getUpVector().y, viewer.getUpVector().z);
|
||||
if (view_from_box)
|
||||
setViewFromBox(eye, look, up);
|
||||
glm::vec3 up(viewer.getUpVector().x, viewer.getUpVector().y, viewer.getUpVector().z);
|
||||
glm::mat4 view = lookAt(eye, look, up); //Calculate view matrix from paramters of m_viewer
|
||||
glm::mat4 projection = perspective(45.0f, m_width / m_height, 0.1f, 500.0f);
|
||||
|
||||
|
||||
@ -37,8 +37,6 @@ private:
|
||||
ShaderProgram *_shaderProgram;
|
||||
int m_width;
|
||||
int m_height;
|
||||
ColorCube _cube;
|
||||
CheckeredFloor _floor;
|
||||
|
||||
float _bgColor[3];
|
||||
|
||||
@ -50,7 +48,5 @@ private:
|
||||
std::vector<ADrawable *> _crane_boom;
|
||||
|
||||
void setup();
|
||||
void setupRectBuffer();
|
||||
void setupCubeBuffer();
|
||||
void setViewFromBox(glm::vec3 &eye, glm::vec3 &look, glm::vec3 &up);
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user