assign mesh, material to objects
[demo] / src / scene.cc
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);