+
+ float max_energy = 0.0f;
+
+#pragma omp parallel for
+ for(int i=0; i<zres; i++) {
+ float z = zmin + i * zstep;
+ float *voxptr = msurf_slice(priv->msurf, i);
+
+ for(int j=0; j<yres; j++) {
+ float y = ymin + j * ystep;
+
+ for(int k=0; k<xres; k++) {
+ float x = xmin + k * xstep;
+
+ float sum = 0.0f;
+ for(int n=0; n<NUM_MBALLS; n++) {
+ float dx = x - priv->mballs[n].pos.x;
+ float dy = y - priv->mballs[n].pos.y;
+ float dz = z - priv->mballs[n].pos.z;
+ float dsq = dx * dx + dy * dy + dz * dz;
+
+ sum += priv->mballs[n].energy / dsq;
+ }
+ *voxptr++ = sum;
+ if(sum > max_energy) max_energy = sum;
+ }
+ }
+ }
+
+ msurf_polygonize(priv->msurf);