// // util.cc // // Various utility functions // // Copyright (C) 1999.11.21 // #include #include "util.h" #include "triangle3d.h" #if 1 /** * Calculate the surface normal at each point3d * @param size width of square * @param p3d array of points which make up square * @param v3d array of vectors in which to store calculated surface normals */ void util::get_normal(int size, const point3d* p3d, vector3d* v3d) { assert(p3d); assert(v3d); int index = 0; for (int z=0; z 0 && z > 0) { triangle3d t(index, left, up); t.calculate_normal(p3d); ii += t.normal.i; jj += t.normal.j; kk += t.normal.k; } // Top right if (x < size-1 && z > 0) { triangle3d t(index, up, right); t.calculate_normal(p3d); ii += t.normal.i; jj += t.normal.j; kk += t.normal.k; } // Bottom right if (x < size-1 && z < size-1) { triangle3d t(index, right, down); t.calculate_normal(p3d); ii += t.normal.i; jj += t.normal.j; kk += t.normal.k; } // Bottom left if (x > 0 && z < size-1) { triangle3d t(index, right, down); t.calculate_normal(p3d); ii += t.normal.i; jj += t.normal.j; kk += t.normal.k; } v3d[index] = vector3d(ii, jj, kk); v3d[index].normalise(); // Next point... index++; } } } #endif // 0 #if 0 // // Calculate the surface normal at each point3d // void util::get_normal(int size, const point3d* p3d, vector3d* v3d) { assert(p3d); assert(v3d); int index = 0; for (int z=0; z