no clue :) just to push it
[demo] / src / meshgen.cc
index 9547cee..bd9fe53 100644 (file)
@@ -119,27 +119,27 @@ void gen_geosphere(Mesh *mesh, float rad, int subdiv, bool hemi)
        for(int i=0; i<num_verts; i++) {
                mesh->indices[i] = i;
        }
-       mesh->update_vertex_data();
+       mesh->invalidate();
 }
 
 // ------ heightfield ------
 
 static Vec3 hfield_vertex(float u, float v, float h, float xsz,
-               float ysz, float height)
+                          float ysz, float height)
 {
        float x = u * xsz - xsz / 2.0;
        float y = h * height;
-       float z = -(v * ysz - ysz / 2.0);
+       float z = v * ysz - ysz / 2.0;
 
        return Vec3(x, y, z);
 }
 
 void gen_heightfield(Mesh *mesh, float xsz, float ysz, float height, int usub,
-               int vsub, float (*calc_height)(float u, float v, void *ptr), void *ptr)
+                     int vsub, float (*calc_height)(float u, float v, void *ptr), void *ptr)
 {
-       /* 
+       /*
        usub and vsub is the number of subdivision at each axis
-       (heightfield = grid) 
+       (heightfield = grid)
        */
        if(usub < 1)
                usub = 1;
@@ -165,21 +165,21 @@ void gen_heightfield(Mesh *mesh, float xsz, float ysz, float height, int usub,
        float dv = 1.0 / (float)num_vvertices;
 
        for(int i=0; i<num_vvertices; i++) {
-               float v = (float)i / (float)num_vvertices;
+               float v = 1 - (float)i / (float)(num_vvertices - 1);
                for(int j=0; j<num_uvertices; j++) {
-                       float u = (float)j / (float)num_uvertices;
+                       float u = (float)j / (float)(num_uvertices - 1);
                        Vec3 vtx = hfield_vertex(u, v, calc_height(u, v, ptr), xsz, ysz, height);
 
                        /* calculating normal with forward differences:
                        slopes in x, z, axis */
 
                        Vec3 tangent = hfield_vertex(u + du, v, calc_height(u + du, v, ptr),
-                                       xsz, ysz, height) - vtx;
+                                                    xsz, ysz, height) - vtx;
 
                        Vec3 bitangent = hfield_vertex(u, v + dv, calc_height(u, v + dv, ptr),
-                                       xsz, ysz, height) - vtx;
+                                                      xsz, ysz, height) - vtx;
 
-                       Vec3 normal = normalize(cross(tangent, bitangent));
+                       Vec3 normal = normalize(cross(bitangent, tangent));
 
                        mesh->vertices[vidx] = vtx;
                        mesh->normals[vidx] = normal;
@@ -190,7 +190,7 @@ void gen_heightfield(Mesh *mesh, float xsz, float ysz, float height, int usub,
        }
 
        /*
-               indices: 
+               indices:
        */
        uint16_t *iptr = &mesh->indices[0];
 
@@ -213,5 +213,5 @@ void gen_heightfield(Mesh *mesh, float xsz, float ysz, float height, int usub,
                        *iptr++ = a;
                }
        }
-       mesh->update_vertex_data();
+       mesh->invalidate();
 }