X-Git-Url: http://git.mutantstargoat.com?p=demo;a=blobdiff_plain;f=src%2Fmain.cc;h=e5572e25f94cf8342f1fe230e1aafed9d07dff92;hp=107fb9d765a53c0a1d02f13d388d573cc991b2e8;hb=fd601d4218b63fdf92c5e4dfa32eac8adbda82fa;hpb=47982b199010496e34eefb95044275fb231cba18 diff --git a/src/main.cc b/src/main.cc index 107fb9d..e5572e2 100644 --- a/src/main.cc +++ b/src/main.cc @@ -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; iobjects.size(); ++i) { + // for(size_t i=0; iobjects.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