X-Git-Url: http://git.mutantstargoat.com?p=demo;a=blobdiff_plain;f=src%2Fterrain.cc;h=bdd787fdd4e3b44eb2181997f79f54488e36d75a;hp=6bfabe8cc5b166f2c3c023aea9bf416399dfb7b3;hb=243eb502c5dc70e586a9e81815234069bf623480;hpb=197f20b5d4db937029f7b585be23ee7fe5da66dc diff --git a/src/terrain.cc b/src/terrain.cc index 6bfabe8..bdd787f 100644 --- a/src/terrain.cc +++ b/src/terrain.cc @@ -1,39 +1,85 @@ +#include + #include "camera.h" +#include "gfxapi.h" #include "image.h" +#include "mesh.h" +#include "meshgen.h" +#include "object.h" #include "scene.h" #include "terrain.h" -Terrain::Terrain() {} +static float calc_height(float u, float v, void *ptr); + +Terrain::Terrain() +{ + vis_scene = 0; +} Terrain::~Terrain() { } +bool Terrain::init() +{ + vis_scene = new Scene; + + return true; +} + +void Terrain::destroy() +{ + delete vis_scene; +} + bool Terrain::generate(const TerrainParams ¶ms) { - // if(xsz <= 0 || ysz <=0) { - // fprintf(stderr, "Invalid terrain size.\n"); - // return false; - // } + tiles.clear(); - // if(xtiles <= 0 || ytiles <= 0) { - // fprintf(stderr, "Invalid number of terrain tiles.\n"); - // return false; - // } + float txsz = params.xsz / params.xtiles; + float tysz = params.ysz / params.ytiles; - // if(tiles) - // tiles.clear(); + for(int i=0; iupdate_vertex_data(); + tiles.push_back(tile); - // } +/* + the terrain scene stores objects only + no need to fill the mat, mesh std::vectors +*/ + Object *o = new Object; + o->mesh = tile.mesh; + o->material = &material; + o->transform = Mat4::identity; + + vis_scene->objects.push_back(o); + } + } return true; } Scene *Terrain::get_visible(const Camera *camera) const { - return 0; + return vis_scene; } + +static float calc_height(float u, float v, void *ptr) +{ + if(!ptr) { + fprintf(stderr, "Terrain parameters not found.\n"); + return 0; + } + + TerrainParams *tp = (TerrainParams*)ptr; + float sn = gph::fbm(u * tp->noise_freq, v * tp->noise_freq, tp->num_octaves); + /* todo use the image later */ + return sn; +} \ No newline at end of file