-
-static float eval(struct metasurface *ms, float x, float y, float z)
-{
- int xidx = cround64(VOL_SZ * x / VOL_SCALE);
- int yidx = cround64(VOL_SZ * y / VOL_SCALE);
- int zidx = cround64(VOL_SZ * z / VOL_SCALE);
-
- assert(xidx >= 0 && xidx < VOL_SZ);
- assert(yidx >= 0 && yidx < VOL_SZ);
- assert(zidx >= 0 && zidx < VOL_SZ);
-
- return VOXEL(xidx, yidx, zidx);
-}
-
-static void emit_vertex(struct metasurface *ms, float x, float y, float z)
-{
- struct g3d_vertex v;
- float val, len;
-
- v.x = x - VOL_HALF_SCALE;
- v.y = y - VOL_HALF_SCALE;
- v.z = z - VOL_HALF_SCALE;
- v.r = cround64(255.0 * x / VOL_SCALE);
- v.g = cround64(255.0 * y / VOL_SCALE);
- v.b = cround64(255.0 * z / VOL_SCALE);
-
- val = eval(ms, x, y, z);
- v.nx = eval(ms, x + VOX_DIST, y, z) - val;
- v.ny = eval(ms, x, y + VOX_DIST, z) - val;
- v.nz = eval(ms, x, y, z - VOX_DIST) - val;
-
- if((len = sqrt(v.nx * v.nx + v.ny * v.ny + v.nz * v.nz)) != 0.0f) {
- v.nx /= len;
- v.ny /= len;
- v.nz /= len;
- }
-
- mmesh.varr = dynarr_push(mmesh.varr, &v);
- assert(mmesh.varr);
- ++mmesh.vcount;
-}
-
-