assign mesh, material to objects
authorEleni Maria Stea <estea@igalia.com>
Mon, 10 Jul 2017 16:05:31 +0000 (19:05 +0300)
committerEleni Maria Stea <estea@igalia.com>
Mon, 10 Jul 2017 16:05:31 +0000 (19:05 +0300)
notes
src/mesh.h
src/object.cc
src/object.h
src/scene.cc
src/shader.cc
src/shader.h

diff --git a/notes b/notes
index 246a33f..56ad03f 100644 (file)
--- a/notes
+++ b/notes
@@ -40,3 +40,6 @@ the assimp nodes info                       contains:
                                                                                                                        |   ShaderProgramGL  |       | ShaderProgramVK |
                                                                                                                        +--------------------+       +-----------------+
 
+
+
+
index 36a79cd..6482bde 100644 (file)
@@ -24,7 +24,9 @@ public:
        std::vector<Vec3> normals;
        std::vector<Vec3> tangents;
        std::vector<Vec2> tex_coords;
+
        std::string name;
+       unsigned int mat_idx;
 
        unsigned int which_mask;
 
index 3a113cb..7b6292d 100644 (file)
@@ -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;
 }
 
index ecd4fa3..220e1d7 100644 (file)
@@ -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();
index e53e5a3..7f9a879 100644 (file)
@@ -29,20 +29,21 @@ Scene::Scene() {}
 
 Scene::~Scene()
 {
-       /* clear meshes */
        for(size_t i=0; i<meshes.size(); ++i)
                delete meshes[i];
        meshes.clear();
 
-       /* clear materials */
        for(size_t i=0; i<materials.size(); ++i)
                delete materials[i];
        materials.clear();
 
-       /* clear textures */
-       for(size_t i= 0; i<textures.size(); ++i)
+       for(size_t i=0; i<textures.size(); ++i)
                delete textures[i];
        textures.clear();
+
+       for(size_t i=0; i<objects.size(); ++i)
+               delete objects[i];
+       objects.clear();
 }
 
 bool Scene::load(const char *fname)
@@ -76,7 +77,13 @@ bool Scene::load(const char *fname)
        }
 
        /* create objects */
-
+       for(unsigned int i=0; i<scene->mNumMeshes; ++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);
index 703c2dc..bd80cfe 100644 (file)
@@ -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
index a6bec05..204d053 100644 (file)
@@ -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_