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"
|
#include "ColorCube.h"
|
||||||
|
|
||||||
void ColorCube::setup()
|
void ColorCube::iboSetup()
|
||||||
{
|
{
|
||||||
std::vector<glm::vec3> cube_vertices =
|
std::vector<glm::vec3> cube_vertices =
|
||||||
{ { -1.0, -1.0, 1.0},
|
{ { -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},
|
{ 1.0, 1.0, -1.0},
|
||||||
{ -1.0, 1.0, -1.0} };
|
{ -1.0, 1.0, -1.0} };
|
||||||
|
|
||||||
GLfloat cube_colors[] = {
|
GLfloat cube_colors[] = {
|
||||||
// front colors
|
// front colors
|
||||||
@ -70,9 +70,95 @@ void ColorCube::setup()
|
|||||||
glBindVertexArray(0);
|
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);
|
glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);
|
||||||
glm::mat4 mvpMatrix = pv * _model.getMatrix();
|
glm::mat4 mvpMatrix = pv * _model.getMatrix();
|
||||||
glUniformMatrix4fv(shader->uniform("mvp"), 1, GL_FALSE, glm::value_ptr(mvpMatrix));
|
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();
|
_model.glPopMatrix();
|
||||||
|
|
||||||
|
|||||||
@ -12,10 +12,13 @@ private:
|
|||||||
GLuint _iboHandle;
|
GLuint _iboHandle;
|
||||||
GLuint _vbo_vertices, _vbo_colors;
|
GLuint _vbo_vertices, _vbo_colors;
|
||||||
|
|
||||||
void setup();
|
bool ibo_used;
|
||||||
|
|
||||||
|
void iboSetup();
|
||||||
|
void vaoSetup();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ColorCube();
|
ColorCube(bool usingIBO);
|
||||||
|
|
||||||
void draw(ShaderProgram *shader, glm::mat4x4 pv) override;
|
void draw(ShaderProgram *shader, glm::mat4x4 pv) override;
|
||||||
DrawableType getType() 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) :
|
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)),
|
viewer(glm::vec3(5, 5, 5), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0), 45.0f, (w / (float)h))
|
||||||
_floor(50, 16)
|
|
||||||
{
|
{
|
||||||
m_width = w;
|
m_width = w;
|
||||||
m_height = h;
|
m_height = h;
|
||||||
|
|
||||||
setup();
|
setup();
|
||||||
setupCubeBuffer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MyGlWindow::~MyGlWindow()
|
MyGlWindow::~MyGlWindow()
|
||||||
@ -61,99 +59,12 @@ void MyGlWindow::setup()
|
|||||||
{
|
{
|
||||||
_shaderProgram = new ShaderProgram();
|
_shaderProgram = new ShaderProgram();
|
||||||
_shaderProgram->initFromFiles("simple.vert", "simple.frag");
|
_shaderProgram->initFromFiles("simple.vert", "simple.frag");
|
||||||
|
|
||||||
_static_drawables.emplace_back(new CheckeredFloor(50, 16));
|
_static_drawables.emplace_back(new CheckeredFloor(50, 16));
|
||||||
|
_static_drawables.push_back(new ColorCube(true));
|
||||||
_static_drawables.emplace_back(new WireCube());
|
_static_drawables.back()->addTranslation(glm::vec4(-2, 1.1f, 0, 0));
|
||||||
_static_drawables.back()->addTranslation(glm::vec4(0, 1.01, 0, 0));
|
_static_drawables.push_back(new ColorCube(false));
|
||||||
|
_static_drawables.back()->addTranslation(glm::vec4(2, 1.1f, 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGlWindow::setViewFromBox(glm::vec3 &eye, glm::vec3 &look, glm::vec3 &up)
|
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 eye(viewer.getViewPoint().x, viewer.getViewPoint().y, viewer.getViewPoint().z);
|
||||||
glm::vec3 look(viewer.getViewCenter().x, viewer.getViewCenter().y, viewer.getViewCenter().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);
|
glm::vec3 up(viewer.getUpVector().x, viewer.getUpVector().y, viewer.getUpVector().z);
|
||||||
if (view_from_box)
|
|
||||||
setViewFromBox(eye, look, up);
|
|
||||||
glm::mat4 view = lookAt(eye, look, up); //Calculate view matrix from paramters of m_viewer
|
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);
|
glm::mat4 projection = perspective(45.0f, m_width / m_height, 0.1f, 500.0f);
|
||||||
|
|
||||||
|
|||||||
@ -37,8 +37,6 @@ private:
|
|||||||
ShaderProgram *_shaderProgram;
|
ShaderProgram *_shaderProgram;
|
||||||
int m_width;
|
int m_width;
|
||||||
int m_height;
|
int m_height;
|
||||||
ColorCube _cube;
|
|
||||||
CheckeredFloor _floor;
|
|
||||||
|
|
||||||
float _bgColor[3];
|
float _bgColor[3];
|
||||||
|
|
||||||
@ -50,7 +48,5 @@ private:
|
|||||||
std::vector<ADrawable *> _crane_boom;
|
std::vector<ADrawable *> _crane_boom;
|
||||||
|
|
||||||
void setup();
|
void setup();
|
||||||
void setupRectBuffer();
|
|
||||||
void setupCubeBuffer();
|
|
||||||
void setViewFromBox(glm::vec3 &eye, glm::vec3 &look, glm::vec3 &up);
|
void setViewFromBox(glm::vec3 &eye, glm::vec3 &look, glm::vec3 &up);
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user