From 4ec94c97879aafef15f7663135745e4ba61e62cf Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Mon, 17 May 2021 00:15:33 +0200 Subject: Extract first public LiterateLB version --- tangle/sampler/shear_layer.h | 67 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tangle/sampler/shear_layer.h (limited to 'tangle/sampler/shear_layer.h') diff --git a/tangle/sampler/shear_layer.h b/tangle/sampler/shear_layer.h new file mode 100644 index 0000000..0d42ee8 --- /dev/null +++ b/tangle/sampler/shear_layer.h @@ -0,0 +1,67 @@ +#pragma once + +#include "sampler.h" + +#include +#include + +template +class ShearLayerVisibilityS : public Sampler { +private: +Lattice& _lattice; +DeviceBuffer& _mask; +SDF _geometry; + +DeviceBuffer _moments_rho; +DeviceBuffer _moments_u; +DeviceBuffer _shear_normals; + +float3 _shear_layer; +float _lower = 0; +float _upper = 1; +bool _center = true; + +public: +ShearLayerVisibilityS(Lattice& lattice, DeviceBuffer& mask, SDF geometry, float3 shear_layer): + Sampler("Shear layer visibility", lattice.cuboid()), + _lattice(lattice), + _mask(mask), + _geometry(geometry), + _moments_rho(lattice.cuboid().volume), + _moments_u(DESCRIPTOR::d * lattice.cuboid().volume), + _shear_normals(DESCRIPTOR::d * lattice.cuboid().volume), + _shear_layer(shear_layer) +{ } + +void sample() { + _lattice.template inspect(_mask, _moments_rho.device(), _moments_u.device(), _shear_normals.device()); + _lattice.template helper(_mask, _shear_normals.device(), _shear_layer, _sample_surface); +} + +void render(VolumetricRenderConfig& config) { + raymarch<<< + dim3(config.canvas_size.x / 32 + 1, config.canvas_size.y / 32 + 1), + dim3(32, 32) + >>>(config, + _geometry, + [samples=_sample_texture, lower=_lower, upper=_upper, center=_center] + __device__ (float3 p) -> float { + float sample = tex3D(samples, p.x, p.y, p.z); + float centered = center ? 0.5 + 0.5*sample : sample; + return fabs(sample) >= lower && fabs(sample) <= upper ? fabs(centered) : 0; + }, + [] __device__ (float x) -> float { + return x; + }); +} + +void interact() { + ImGui::InputFloat3("Normal", reinterpret_cast(&_shear_layer)); + ImGui::Checkbox("Center", &_center); + ImGui::DragFloatRange2("Bounds", &_lower, &_upper, 0.01f, 0.f, 1.f, "%.2f", "%.2f"); +} + +}; + +template +ShearLayerVisibilityS(Lattice&, DeviceBuffer&, SDF) -> ShearLayerVisibilityS; -- cgit v1.2.3