volviewer

Volumetric Data Toy Viewer
git clone anongit@rnpnr.xyz:volviewer.git
Log | Files | Refs | Feed | LICENSE

Commit: ef9bfd349de6ad0e71c7652f6fa96f6d979978cf
Parent: caa974ffa3c99cf4525c631eb2285098abefd1ea
Author: Randy Palamar
Date:   Tue, 27 May 2025 15:27:11 -0600

tweak a few rendering settings

Diffstat:
Mcommon.c | 5+++++
Mopengl.h | 1+
Moptions.h | 10+++++++---
Mrender_model.frag.glsl | 3+++
4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/common.c b/common.c @@ -409,6 +409,7 @@ init_viewer(ViewerContext *ctx) "layout(location = " str(MODEL_RENDER_LOG_SCALE_LOC) ") uniform bool u_log_scale;\n" "layout(location = " str(MODEL_RENDER_BB_COLOUR_LOC) ") uniform vec4 u_bb_colour = vec4(" str(BOUNDING_BOX_COLOUR) ");\n" "layout(location = " str(MODEL_RENDER_BB_FRACTION_LOC) ") uniform float u_bb_fraction = " str(BOUNDING_BOX_FRACTION) ";\n" + "layout(location = " str(MODEL_RENDER_GAIN_LOC) ") uniform float u_gain = 1.0f;\n" "\n" "layout(binding = 0) uniform sampler3D u_texture;\n" "\n#line 1\n"); @@ -602,6 +603,7 @@ draw_volume_item(ViewerContext *ctx, VolumeDisplayItem *v, f32 rotation, f32 tra glProgramUniform1f(program, MODEL_RENDER_CLIP_FRACTION_LOC, 1 - v->clip_fraction); glProgramUniform1f(program, MODEL_RENDER_THRESHOLD_LOC, v->threshold); + glProgramUniform1f(program, MODEL_RENDER_GAIN_LOC, v->gain); glProgramUniform1ui(program, MODEL_RENDER_SWIZZLE_LOC, v->swizzle); glBindTextureUnit(0, v->texture); @@ -651,6 +653,9 @@ update_scene(ViewerContext *ctx, f32 dt) set_camera(program, MODEL_RENDER_VIEW_MATRIX_LOC, camera, v3_normalize(v3_sub(camera, (v3){0})), (v3){{0, 1, 0}}); + glProgramUniform1ui(program, MODEL_RENDER_LOG_SCALE_LOC, LOG_SCALE); + glProgramUniform1f(program, MODEL_RENDER_DYNAMIC_RANGE_LOC, DYNAMIC_RANGE); + #if DRAW_ALL_VOLUMES for (u32 i = 0; i < countof(volumes); i++) draw_volume_item(ctx, volumes + i, angle, volumes[i].translate_x); diff --git a/opengl.h b/opengl.h @@ -68,6 +68,7 @@ typedef ptrdiff_t GLintptr; X(glObjectLabel, void, (GLenum identifier, GLuint name, GLsizei length, const char *label)) \ X(glProgramUniform1f, void, (GLuint program, GLint location, GLfloat v0)) \ X(glProgramUniform1ui, void, (GLuint program, GLint location, GLuint v0)) \ + X(glProgramUniform4fv, void, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \ X(glProgramUniformMatrix4fv, void, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \ X(glShaderSource, void, (GLuint shader, GLsizei count, const GLchar **strings, const GLint *lengths)) \ X(glTextureParameteri, void, (GLuint texture, GLenum pname, GLint param)) \ diff --git a/options.h b/options.h @@ -15,6 +15,9 @@ #define BOUNDING_BOX_COLOUR 0.78, 0.07, 0.20, 1 #define BOUNDING_BOX_FRACTION 0.007f +#define DYNAMIC_RANGE 30 +#define LOG_SCALE 1 + typedef struct { c8 *file_path; u32 width; /* number of points in data */ @@ -27,6 +30,7 @@ typedef struct { f32 translate_x; /* mm to translate by when multi display is active */ b32 swizzle; /* 1 -> swap y-z coordinates when sampling texture */ b32 multi_file; /* 1 -> depth == N-frames, file_path == fmt string */ + f32 gain; /* uniform image gain */ u32 texture; } VolumeDisplayItem; @@ -34,8 +38,8 @@ typedef struct { global u32 single_volume_index = 0; global VolumeDisplayItem volumes[] = { /* WALKING FORCES */ - {"./data/test/frame_%02u.bin", 512, 1024, 64, {{-20.5, -9.6, 5}}, {{20.5, 9.6, 50}}, 0.62, 72, 0, 0, 1}, + {"./data/test/frame_%02u.bin", 512, 1024, 64, {{-20.5, -9.6, 5}}, {{20.5, 9.6, 50}}, 0.62, 72, 0, 0, 1, 3.7}, /* RCA */ - {"./data/tpw.bin", 512, 64, 1024, {{-9.6, -9.6, 5}}, {{9.6, 9.6, 50}}, 0, 92, -5 * 18.5, 1, 0}, - {"./data/vls.bin", 512, 64, 1024, {{-9.6, -9.6, 5}}, {{9.6, 9.6, 50}}, 0, 89, 5 * 18.5, 1, 0}, + {"./data/tpw.bin", 512, 64, 1024, {{-9.6, -9.6, 5}}, {{9.6, 9.6, 50}}, 0, 92, -5 * 18.5, 1, 0, 5}, + {"./data/vls.bin", 512, 64, 1024, {{-9.6, -9.6, 5}}, {{9.6, 9.6, 50}}, 0, 89, 5 * 18.5, 1, 0, 5}, }; diff --git a/render_model.frag.glsl b/render_model.frag.glsl @@ -26,6 +26,9 @@ void main() smp = smp / threshold_val; smp = pow(smp, u_gamma); + float t = test_texture_coordinate.y; + smp = smp * smoothstep(-0.4, 1.1, t) * u_gain; + if (u_log_scale) { smp = 20 * log(smp) / log(10); smp = clamp(smp, -u_db_cutoff, 0) / -u_db_cutoff;