symmetry

annotate src/terrain.h @ 1:46fe847bba08

using goat3dgfx
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 25 Feb 2014 23:47:20 +0200
parents
children
rev   line source
nuclear@1 1 #ifndef TERRAIN_H_
nuclear@1 2 #define TERRAIN_H_
nuclear@1 3
nuclear@1 4 #include "vmath/vmath.h"
nuclear@1 5
nuclear@1 6 class Terrain {
nuclear@1 7 private:
nuclear@1 8 float dx, dy; // inter-pixel distance in uv-space
nuclear@1 9 int xsz, ysz;
nuclear@1 10 float *hmap;
nuclear@1 11
nuclear@1 12 float scale, height_scale;
nuclear@1 13
nuclear@1 14 mutable int dlist, dlist_norm;
nuclear@1 15 mutable int dlist_sub[2], dlist_norm_sub[2];
nuclear@1 16 mutable float dlist_norm_sz;
nuclear@1 17
nuclear@1 18 void invalidate_mesh();
nuclear@1 19
nuclear@1 20 public:
nuclear@1 21 Terrain();
nuclear@1 22 ~Terrain();
nuclear@1 23
nuclear@1 24 void set_scale(float s);
nuclear@1 25 float get_scale() const;
nuclear@1 26
nuclear@1 27 void set_height_scale(float s);
nuclear@1 28 float get_height_scale() const;
nuclear@1 29
nuclear@1 30 bool load(const char *fname);
nuclear@1 31 int get_map_width() const { return xsz; }
nuclear@1 32 int get_map_height() const { return ysz; }
nuclear@1 33
nuclear@1 34 Vector2 world_to_uv(const Vector2 &pt) const;
nuclear@1 35 Vector2 uv_to_world(const Vector2 &pt) const;
nuclear@1 36
nuclear@1 37 float lookup(int x, int y) const;
nuclear@1 38
nuclear@1 39 float get_height(const Vector2 &pt) const;
nuclear@1 40 Vector3 get_normal(const Vector2 &pt) const;
nuclear@1 41
nuclear@1 42 float get_world_height(const Vector2 &pt) const;
nuclear@1 43
nuclear@1 44 bool intersect(const Ray &ray, float *dist) const;
nuclear@1 45 bool intersect_micro(const Ray &ray, float *dist, float thres = 0.01) const;
nuclear@1 46
nuclear@1 47 void draw(int usub = 0, int vsub = 0) const;
nuclear@1 48 void draw_normals(float sz = 1.0, int usub = 0, int vsub = 0) const;
nuclear@1 49 };
nuclear@1 50
nuclear@1 51 #endif // TERRAIN_H_