From 46cc932f7ddb0c81f352bc847973dae6b327ebeb Mon Sep 17 00:00:00 2001 From: Eleni Maria Stea Date: Mon, 10 Jul 2017 19:05:31 +0300 Subject: [PATCH] assign mesh, material to objects --- notes | 3 +++ src/mesh.h | 2 ++ src/object.cc | 6 +----- src/object.h | 4 +--- src/scene.cc | 23 +++++++++++++++++------ src/shader.cc | 15 ++++++++++++++- src/shader.h | 8 +++++--- 7 files changed, 43 insertions(+), 18 deletions(-) diff --git a/notes b/notes index 246a33f..56ad03f 100644 --- a/notes +++ b/notes @@ -40,3 +40,6 @@ the assimp nodes info contains: | ShaderProgramGL | | ShaderProgramVK | +--------------------+ +-----------------+ + + + diff --git a/src/mesh.h b/src/mesh.h index 36a79cd..6482bde 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -24,7 +24,9 @@ public: std::vector normals; std::vector tangents; std::vector tex_coords; + std::string name; + unsigned int mat_idx; unsigned int which_mask; diff --git a/src/object.cc b/src/object.cc index 3a113cb..7b6292d 100644 --- a/src/object.cc +++ b/src/object.cc @@ -4,11 +4,7 @@ Object::Object() { - material.diffuse = Vec3(0, 0, 0); - material.specular = Vec3(0, 0, 0); - material.shininess = 0; - material.dtex = 0; - + material = 0; mesh = 0; } diff --git a/src/object.h b/src/object.h index ecd4fa3..220e1d7 100644 --- a/src/object.h +++ b/src/object.h @@ -16,8 +16,6 @@ enum OType { }; struct Material { -// std::string name; <-TODO or id - Vec3 diffuse; Vec3 specular; float shininess; @@ -28,7 +26,7 @@ struct Material { class Object { public: Mat4 transform; - Material material; + Material *material; Mesh *mesh; Object(); diff --git a/src/scene.cc b/src/scene.cc index e53e5a3..7f9a879 100644 --- a/src/scene.cc +++ b/src/scene.cc @@ -29,20 +29,21 @@ Scene::Scene() {} Scene::~Scene() { - /* clear meshes */ for(size_t i=0; imNumMeshes; ++i) { + Object *object = new Object(); + object->mesh = meshes[i]; + int idx = meshes[i]->mat_idx; + object->material = materials[idx]; + objects.push_back(object); + } aiReleaseImport(scene); return true; @@ -164,6 +171,8 @@ static Mesh *load_mesh(const aiScene *scene, unsigned int index) else fprintf(stderr, "No faces found.\n"); + mesh->mat_idx = amesh->mMaterialIndex; + printf("material idx:%u", mesh->mat_idx); return mesh; } @@ -179,7 +188,9 @@ static Material *load_material(const aiScene *ascene, Scene *scene, unsigned int mat->dtex = 0; mat->shininess = 40; - // mat->name = std::string(amat->name.data); + // aiString name; + // amat->Get(AI_MATKEY_NAME, name); + // mat->name = std::string(name.data); aiColor4D color; aiGetMaterialColor(amat, AI_MATKEY_COLOR_DIFFUSE, &color); diff --git a/src/shader.cc b/src/shader.cc index 703c2dc..bd80cfe 100644 --- a/src/shader.cc +++ b/src/shader.cc @@ -4,6 +4,19 @@ Shader::Shader() {} Shader::~Shader() {} +bool Shader::load(const char *fname, SType type) +{ + switch(type) { + case SDR_VERTEX: + case SDR_FRAGMENT: + break; + default: + fprintf(stderr, "Invalid shader type used in loading.\n"); + return false; + } + return true; +} + ShaderProgram::ShaderProgram() { } @@ -12,7 +25,7 @@ ShaderProgram::~ShaderProgram() { } -void ShaderProgram::set_shader(Shader *sdr, SType type) +void ShaderProgram::add_shader(Shader *sdr, SType type) { shaders[type] = sdr; } \ No newline at end of file diff --git a/src/shader.h b/src/shader.h index a6bec05..204d053 100644 --- a/src/shader.h +++ b/src/shader.h @@ -2,7 +2,7 @@ #define SHADER_H_ enum SType { - SDR_VERTzX, + SDR_VERTEX, SDR_FRAGMENT }; @@ -14,7 +14,7 @@ public: Shader(); ~Shader(); - virtual bool load(const char *fname, SType type) = 0; + virtual bool load(const char *fname, SType type); }; class ShaderProgram { @@ -25,7 +25,9 @@ public: ShaderProgram(); virtual ~ShaderProgram() = 0; - void set_shader(Shader *sdr, SType type); + void add_shader(Shader *sdr, SType type); + bool link(); + void bind(); }; #endif // SHADER_H_ -- 1.7.10.4