From 85422fbdaf5c56ca817f0a8d8f17f2d725dd1c3a Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Wed, 6 Apr 2016 02:55:02 +0200 Subject: Finish CSG, permittivity visualisation. --- src/renderer.c | 73 ++++++++++++++++++++++++---------------------------------- 1 file changed, 30 insertions(+), 43 deletions(-) (limited to 'src/renderer.c') diff --git a/src/renderer.c b/src/renderer.c index d68287c..6d159e7 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -373,7 +373,7 @@ int r_xsection_update(r_window *rw, r_xsection *xsection, phy_sim *sim, { phy_field_info *fi = &sim->field_info; float *field; - size_t width, height, x, y, z; + size_t width, height, x[3], dx, dy, d0; uint8_t *pixels; int pitch; float scale; @@ -387,12 +387,21 @@ int r_xsection_update(r_window *rw, r_xsection *xsection, phy_sim *sim, if (flags & XSECTION_XY) { width = fi->dims[0]; height = fi->dims[1]; + d0 = 2; + dx = 0; + dy = 1; } else if (flags & XSECTION_XZ) { width = fi->dims[0]; height = fi->dims[2]; + d0 = 1; + dx = 0; + dy = 2; } else { width = fi->dims[1]; height = fi->dims[2]; + d0 = 0; + dx = 1; + dy = 2; } if (flags & XSECTION_E) { @@ -419,61 +428,39 @@ int r_xsection_update(r_window *rw, r_xsection *xsection, phy_sim *sim, SDL_LockTexture(xsection->texture, NULL, (void**)&pixels, &pitch); - if (flags & XSECTION_XY) { - z = frac * fi->dims[2]; - if (z >= fi->dims[2]) - z = fi->dims[2] - 1; + x[d0] = frac * fi->dims[d0]; + if (x[d0] >= fi->dims[d0]) + x[d0] = fi->dims[d0] - 1; - for (y = 0; y < fi->dims[1]; y++) - for (x = 0; x < fi->dims[0]; x++) { + if (flags & XSECTION_EPS) + for (x[dy] = 0; x[dy] < fi->dims[dy]; x[dy]++) + for (x[dx] = 0; x[dx] < fi->dims[dx]; x[dx]++) { uint8_t *pixel; - float *point; + float gray; + phy_field_aux_point *aux; - pixel = pixels + (y * pitch + x * 4); - point = field + z * fi->zstr + y * fi->ystr + - x * fi->xstr; + pixel = pixels + (x[dy] * pitch + x[dx] * 4); + aux = sim->aux + x[2] * fi->zstr1 + x[1] * fi->ystr1 + + x[0] * fi->xstr1; - pixel[0] = r_float_to_u8(point[0] * scale); - pixel[1] = r_float_to_u8(point[1] * scale); - pixel[2] = r_float_to_u8(point[2] * scale); + gray = remap(aux->eps, sim->eps_min, sim->eps_max, + 0.0f, 1.0f); + pixel[0] = pixel[1] = pixel[2] = r_float_to_u8(gray); } - } else if (flags & XSECTION_XZ) { - y = frac * fi->dims[1]; - if (y >= fi->dims[1]) - y = fi->dims[1] - 1; - - for (z = 0; z < fi->dims[2]; z++) - for (x = 0; x < fi->dims[0]; x++) { - uint8_t *pixel; - float *point; - - pixel = pixels + (z * pitch + x * 4); - point = field + z * fi->zstr + y * fi->ystr + - x * fi->xstr; - - pixel[0] = r_float_to_u8(point[0] * scale); - pixel[1] = r_float_to_u8(point[1] * scale); - pixel[2] = r_float_to_u8(point[2] * scale); - } - } else { - x = frac * fi->dims[0]; - if (x >= fi->dims[0]) - x = fi->dims[0] - 1; - - for (z = 0; z < fi->dims[2]; z++) - for (y = 0; y < fi->dims[1]; y++) { + else + for (x[dy] = 0; x[dy] < fi->dims[dy]; x[dy]++) + for (x[dx] = 0; x[dx] < fi->dims[dx]; x[dx]++) { uint8_t *pixel; float *point; - pixel = pixels + (z * pitch + y * 4); - point = field + z * fi->zstr + y * fi->ystr + - x * fi->xstr; + pixel = pixels + (x[dy] * pitch + x[dx] * 4); + point = field + x[2] * fi->zstr + x[1] * fi->ystr + + x[0] * fi->xstr; pixel[0] = r_float_to_u8(point[0] * scale); pixel[1] = r_float_to_u8(point[1] * scale); pixel[2] = r_float_to_u8(point[2] * scale); } - } SDL_UnlockTexture(xsection->texture); -- cgit