terrain working - no culling
[demo] / src / main.cc
index 107fb9d..e5572e2 100644 (file)
@@ -54,16 +54,17 @@ ShaderManager *sdr_man;
 static float aspect;
 static OrbitCamera *camera;
 
-static Scene *scene_cow;
-static Renderer *rcow;
+static Scene *cow_scene;
+static Renderer *cow_rend;
 
-static Scene *scene_ground;
-static Renderer *rground; // default renderer
-static Texture *gskybox;
+static Scene *ground_scene;
+static Renderer *ground_rend; // default renderer
+static Texture *skybox_tex;
 
-static Renderer *tr;
-static Material tmat;
-static Terrain t;
+static Renderer *terrain_rend;
+static Material terrain_mat;
+static Texture *terrain_tex;
+static Terrain terrain;
 
 /* *** */
 
@@ -120,79 +121,91 @@ static bool init(Gfx_API api)
 
        camera = new OrbitCamera;
 
-       // scene_ground = new Scene;
-       // if(!scene_ground->load("data/ground.obj")) {
+       // ground_scene = new Scene;
+       // if(!ground_scene->load("data/ground.obj")) {
        //      fprintf(stderr, "Failed to load scene: ground.obj.\n");
        //      return false;
        // }
 
-       // rground = new Renderer;
-       // rground->camera = camera;
-       // rground->scene = scene_ground;
+       // ground_rend = new Renderer;
+       // ground_rend->camera = camera;
+       // ground_rend->scene = ground_scene;
 
-       // if(!rground->create()) {
+       // if(!ground_rend->create()) {
        //      fprintf(stderr, "Failed to create default renderer.\n");
        //      return false;
        // }
 
-       // gskybox = gfx_create_texture();
-       // gskybox->load("data/cubemap/cubemap.hdr");
-       // rground->set_sky_tex(gskybox);
+       // skybox_tex = gfx_create_texture();
+       // skybox_tex->load("data/cubemap/cubemap.hdr");
+       // ground_rend->set_sky_tex(skybox_tex);
 
-       scene_cow = new Scene;
-       if(!scene_cow->load("data/spot/spot.obj")) {
+       cow_scene = new Scene;
+       if(!cow_scene->load("data/spot/spot.obj")) {
                fprintf(stderr, "Failed to load scene: spot.obj.\n");
                return false;
        }
 
-       rcow = new Renderer;
-       rcow->camera = camera;
-       rcow->scene = scene_cow;
+       cow_rend = new Renderer;
+       cow_rend->camera = camera;
+       cow_rend->scene = cow_scene;
 
-       if(!rcow->create()) {
+       if(!cow_rend->create()) {
                fprintf(stderr, "Failed to create renderer for cows.\n");
                return false;
        }
 
+       terrain_tex = gfx_create_texture();
+       if(!terrain_tex->load("data/grass.jpeg")) {
+               fprintf(stderr, "Failed to load ground texture.\n");
+               return false;
+       }
+
+       Image ter_hmap;
+       if(!ter_hmap.load("data/terhmap.png")) {
+               fprintf(stderr, "Failed to load terrain heightmap.\n");
+               return false;
+       }
+
        TerrainParams p;
        p.xsz = 50;
        p.ysz = 50;
-       p.max_height = 2;
+       p.max_height = 5;
        p.xtiles = 20;
        p.ytiles = 20;
        p.tile_usub = 10;
        p.tile_vsub = 10;
        p.num_octaves = 3;
        p.noise_freq = 10;
-       p.coarse_heightmap = 0;
+       p.coarse_heightmap = &ter_hmap;
 
-       t.init();
-       t.generate(p);
+       terrain.init();
+       terrain.generate(p);
 
-       tmat.diffuse = Vec3(1, 0, 0);
-       tmat.specular = Vec3(0.5, 0, 0);
-       tmat.shininess = 40;
-       tmat.dtex = 0;
-       tmat.name = "tt";
+       terrain_mat.diffuse = Vec3(1, 1, 1);
+       terrain_mat.specular = Vec3(0, 0, 0);
+       terrain_mat.shininess = 40;
+       terrain_mat.dtex = terrain_tex;
+       terrain_mat.name = "tt";
 
-       t.material = tmat;
+       terrain.material = terrain_mat;
 
-       tr = new Renderer;
-       tr->camera = camera;
-       tr->scene = t.get_visible(camera);
-       if(!tr->create()) {
+       terrain_rend = new Renderer;
+       terrain_rend->camera = camera;
+       terrain_rend->scene = terrain.get_visible(camera);
+       if(!terrain_rend->create()) {
                fprintf(stderr, "terrain fail\n");
                return false;
        }
 
 
 // TODO delete: debugging
-       // for(size_t i=0; i<scene_ground->objects.size(); ++i) {
+       // for(size_t i=0; i<ground_scene->objects.size(); ++i) {
        //      printf("object: %d\n", (int)i);
-       //      printf("mesh: %s\n", scene_ground->objects[i]->mesh->name.c_str());
-       //      printf("material: %s\n", scene_ground->objects[i]->material->name.c_str());
+       //      printf("mesh: %s\n", ground_scene->objects[i]->mesh->name.c_str());
+       //      printf("material: %s\n", ground_scene->objects[i]->material->name.c_str());
        //      printf("transform:\n");
-       //      scene_ground->objects[i]->transform.print();
+       //      ground_scene->objects[i]->transform.print();
        // }
        return true;
 }
@@ -202,14 +215,15 @@ static void cleanup()
        delete sdr_man;
        delete camera;
 
-       delete scene_cow;
-       delete rcow;
+       delete cow_scene;
+       delete cow_rend;
 
-       // delete scene_ground;
-       // delete rground;
+       // delete ground_scene;
+       // delete ground_rend;
 
 //TODO
-       delete tr;
+       delete terrain_tex;
+       delete terrain_rend;
        gfx_cleanup();
 }
 
@@ -272,7 +286,7 @@ static void display()
        // gfx_clear(0.76, 0.3, 0.43);
        gfx_clear(0.1, 0.1, 0.1);
 
-       tr->draw();
-//     rground->draw();
-       // rcow->draw();
+       terrain_rend->draw();
+//     ground_rend->draw();
+       cow_rend->draw();
 }
\ No newline at end of file