+
+static float calc_height(float u, float v, void *ptr)
+{
+ if(!ptr) {
+ fprintf(stderr, "Terrain parameters not found.\n");
+ return 0;
+ }
+
+ GenData *data = (GenData*)ptr;
+ const TerrainParams *tp = data->tp;
+
+ u = u / tp->xtiles + data->xoffs;
+ v = v / tp->ytiles + data->yoffs;
+
+ float sn = gph::fbm(u * tp->noise_freq, v * tp->noise_freq, tp->num_octaves);
+
+ if(tp->coarse_heightmap) {
+ Vec4 texel = tp->coarse_heightmap->lookup_nearest(u, v);
+ sn *= texel.x;
+ }
+ return sn;
+}
\ No newline at end of file