added model loading into opengl. not yet seeing output.

This commit is contained in:
Andreas Ortmann 2016-09-28 13:16:11 +02:00
parent 0105bfe430
commit 92c27a1ef8
4 changed files with 87 additions and 7 deletions

View file

@ -20,8 +20,8 @@
class GameWindow : public endofthejedi::GLWindow {
private:
Game* m_game;
endofthejedi::RendererPolygon2d m_renderer;
//endofthejedi::RendererPolygon3d m_renderer;
//endofthejedi::RendererPolygon2d m_renderer;
endofthejedi::RendererPolygon3d m_renderer;
//endofthejedi::RendererRayTracer m_renderer;
protected:

View file

@ -24,6 +24,10 @@ class PolygonModel {
bool import()
{
m_vbo_id_position = 0;
m_vbo_id_normal = 0;
m_numVertices = 0;
// Create an instance of the Importer class
Assimp::Importer importer;
// And have it read the given file with some example postprocessing
@ -51,6 +55,75 @@ class PolygonModel {
return true;
}
bool loadIntoOpenGl()
{
glEnableVertexAttribArray(0);
glGenBuffers(1, &m_vbo_id_position); // Generate buffer
glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id_position); // Bind buffer
glVertexAttribPointer(0,
3, // three floats per vertex
GL_FLOAT, // Data is floating point type
GL_FALSE, // No fixed point scaling
0, // stride: no
NULL); // No offset
// fill buffer with the loaded mesh position data
glBufferData(
GL_ARRAY_BUFFER, // Buffer target
3 * m_numVertices * sizeof(float), // Buffer data size
m_data_position.data(), // Buffer data pointer
GL_STATIC_DRAW); // Usage - Data never changes;
// TODO
#if 0
// 2 holds normal data
glEnableVertexAttribArray(2);
glGenBuffers(1, &(model->vbo_normal)); // Generate buffer
glBindBuffer(GL_ARRAY_BUFFER, model->vbo_normal); // Bind buffer
glVertexAttribPointer(2,
3, // three floats per normal
GL_FLOAT, // Data is floating point type
GL_FALSE, // No fixed point scaling
0, // stride: no
NULL); // No offset
// Fill bound buffer
glBufferData(
GL_ARRAY_BUFFER, // Buffer target
3*model->numVertices*sizeof(float), // Buffer data size
model->normals, // Buffer data pointer
GL_STATIC_DRAW); // Usage - Data never changes;
#endif
return true;
}
bool bind()
{
// bind position vbo
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id_position);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
// TODO
#if 0
// bind normal vbo
GLuint normalLoc = glGetAttribLocation(program, "attr_normal");
glEnableVertexAttribArray(normalLoc);
glBindBuffer(GL_ARRAY_BUFFER, mesh->vbo_normal);
glVertexAttribPointer(normalLoc, 3, GL_FLOAT, GL_FALSE, 0, NULL);
#endif
return true;
}
void render()
{
glDrawArrays(GL_TRIANGLES, 0, m_numVertices);
}
private:
bool copyVertices(const aiScene *scene)
{
@ -104,12 +177,12 @@ class PolygonModel {
std::string m_filename;
bool m_loaded;
size_t m_numVertices;
// both will hold 3 * numVertices floats
std::vector<float> m_data_position;
std::vector<float> m_data_normal;
size_t m_numVertices;
GLuint m_vbo_id_position;
GLuint m_vbo_id_normal;
};

View file

@ -9,14 +9,19 @@ namespace endofthejedi {
{
std::cout<<"setup 3d" << std::endl;
PolygonModel atomicBomb("../data/mesh/small_atomic_bomb.stl");
exit(-1);
m_atomicBomb = new PolygonModel("../data/mesh/small_atomic_bomb.stl");
m_atomicBomb->loadIntoOpenGl();
m_models.push_back(m_atomicBomb);
}
void RendererPolygon3d::render(const game::State *state)
{
(void) state;
std::cout<<"render 3d" << std::endl;
m_atomicBomb->bind();
m_atomicBomb->render();
//std::cout<<"render 3d" << std::endl;
}
}

View file

@ -25,5 +25,7 @@ namespace endofthejedi {
private:
std::vector<PolygonModel*> m_models;
PolygonModel *m_atomicBomb;
};
}