fixed terrain rendering - visualized normals
[demo] / src / main.cc
index 166b467..933bd62 100644 (file)
@@ -16,6 +16,7 @@
 #include "object.h"
 #include "renderer.h"
 #include "scene.h"
+#include "terrain.h"
 #include "texture.h"
 
 #include "opengl/opengl.h"
@@ -60,6 +61,10 @@ static Scene *scene_ground;
 static Renderer *rground; // default renderer
 static Texture *gskybox;
 
+static Renderer *tr;
+static Material tmat;
+static Terrain t;
+
 /* *** */
 
 int main(int argc, char **argv)
@@ -116,11 +121,24 @@ static bool init(Gfx_API api)
        camera = new OrbitCamera;
        camera->set_orbit_params(phi, theta, dist);
 
-       scene_ground = new Scene;
-       if(!scene_ground->load("data/ground.obj")) {
-               fprintf(stderr, "Failed to load scene: ground.obj.\n");
-               return false;
-       }
+       // scene_ground = new Scene;
+       // if(!scene_ground->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;
+
+       // if(!rground->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);
 
        scene_cow = new Scene;
        if(!scene_cow->load("data/spot/spot.obj")) {
@@ -128,19 +146,6 @@ static bool init(Gfx_API api)
                return false;
        }
 
-       rground = new Renderer;
-       rground->camera = camera;
-       rground->scene = scene_ground;
-
-       if(!rground->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);
-
        rcow = new Renderer;
        rcow->camera = camera;
        rcow->scene = scene_cow;
@@ -150,14 +155,46 @@ static bool init(Gfx_API api)
                return false;
        }
 
-// TODO delete: debugging
-       for(size_t i=0; i<scene_ground->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("transform:\n");
-               scene_ground->objects[i]->transform.print();
+       TerrainParams p;
+       p.xsz = 50;
+       p.ysz = 50;
+       p.max_height = 1;
+       p.xtiles = 1; //40;
+       p.ytiles = 1; // 40;
+       p.tile_usub = 8;
+       p.tile_vsub = 8;
+       p.num_octaves = 3;
+       p.noise_freq = 10;
+       p.coarse_heightmap = 0;
+
+       t.init();
+       t.generate(p);
+
+       tmat.diffuse = Vec3(1, 0, 0);
+       tmat.specular = Vec3(0.5, 0, 0);
+       tmat.shininess = 40;
+       tmat.dtex = 0;
+       tmat.name = "tt";
+
+       t.material = tmat;
+
+       tr = new Renderer;
+       tr->camera = camera;
+       tr->scene = t.get_visible(camera);
+       if(!tr->create()) {
+               fprintf(stderr, "terrain fail\n");
+               return false;
        }
+
+
+// TODO delete: debugging
+       // for(size_t i=0; i<scene_ground->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("transform:\n");
+       //      scene_ground->objects[i]->transform.print();
+       // }
        return true;
 }
 
@@ -169,9 +206,11 @@ static void cleanup()
        delete scene_cow;
        delete rcow;
 
-       delete scene_ground;
-       delete rground;
+       // delete scene_ground;
+       // delete rground;
 
+//TODO
+       delete tr;
        gfx_cleanup();
 }
 
@@ -231,8 +270,10 @@ static void display()
 {
        camera->set_orbit_params(phi, theta, dist);
 
-       gfx_clear(0.76, 0.3, 0.43);
+       // gfx_clear(0.76, 0.3, 0.43);
+       gfx_clear(0.1, 0.1, 0.1);
 
-       rground->draw();
-       rcow->draw();
+       tr->draw();
+//     rground->draw();
+       // rcow->draw();
 }
\ No newline at end of file