diff options
| author | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-12-21 20:53:50 +0100 |
|---|---|---|
| committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-12-21 20:53:50 +0100 |
| commit | b1d61c67c28a9ba4a1de834e401d97cfc9e84764 (patch) | |
| tree | f84727c98f5bd41d6937d7936272120a2821e669 /util | |
| parent | 3077dce642f110a3e010d154a9687310ab71de43 (diff) | |
| download | libs-lbm-b1d61c67c28a9ba4a1de834e401d97cfc9e84764.tar.gz | |
Reworking some structures. adding particle tests again
Diffstat (limited to 'util')
| -rwxr-xr-x | util/podman/build.sh (renamed from util/build.sh) | 1 | ||||
| -rw-r--r-- | util/vtk_renderer/.nix/derivation.nix | 25 | ||||
| -rw-r--r-- | util/vtk_renderer/Makefile | 12 | ||||
| -rw-r--r-- | util/vtk_renderer/kel_vtk_renderer.cpp | 80 |
4 files changed, 118 insertions, 0 deletions
diff --git a/util/build.sh b/util/podman/build.sh index 254c1ff..1f36f2a 100755 --- a/util/build.sh +++ b/util/podman/build.sh @@ -41,6 +41,7 @@ podman run --rm -it \ nix-shell -p fpm --run \"fpm -s dir -t deb -n \$PKG_NAME -v \$PKG_VERSION -C result --prefix /usr/local .\" # Create .rpm package + # Turned off right now (Well, commented) # nix-shell -p fpm rpm --run \"fpm -s dir -t rpm -n \$PKG_NAME -v \$PKG_VERSION -C result --prefix /usr/local .\" " diff --git a/util/vtk_renderer/.nix/derivation.nix b/util/vtk_renderer/.nix/derivation.nix new file mode 100644 index 0000000..e56ee0c --- /dev/null +++ b/util/vtk_renderer/.nix/derivation.nix @@ -0,0 +1,25 @@ +{ lib +, stdenv +, gnumake +, pkg-config +, vtk +}: + +stdenv.mkDerivation { + pname = "kel-vtk-renderer"; + version = "0.0.1"; + + nativeBuildInputs = [ + gnumake + pkg-config + ]; + + buildInputs = [ + vtk + ]; + + installPhase = '' + mkdir -p $out/bin + cp kel_vtk_renderer $out/bin + ''; +} diff --git a/util/vtk_renderer/Makefile b/util/vtk_renderer/Makefile new file mode 100644 index 0000000..00ec9c4 --- /dev/null +++ b/util/vtk_renderer/Makefile @@ -0,0 +1,12 @@ +.PHONY: all + +CXX = c++ +CXXFLAGS=-std=c++20 -O3 -I/nix/store/31vfnljfr5jjh74h4j4v5a1r6w57g6zp-vtk-9.2.6/include/vtk +LIBS=-I/nix/store/31vfnljfr5jjh74h4j4v5a1r6w57g6zp-vtk-9.2.6/lib -lvtkCommonCore -lvtkRenderingCore -lvtkRenderingOpenGL2 -lvtksys -lvtkFiltersGeometry -lvtkCommonExecutionModel -lvtkIOImage -lvtkIOCore -lvtkIOGeometry -lvtkIOLegacy + +TARGET = kel_vtk_renderer + +all: ${TARGET} + +${TARGET}: ${TARGET}.cpp + ${CXX} ${CXXFLAGS} ${LIBS} -o $@ $^ diff --git a/util/vtk_renderer/kel_vtk_renderer.cpp b/util/vtk_renderer/kel_vtk_renderer.cpp new file mode 100644 index 0000000..516e4c3 --- /dev/null +++ b/util/vtk_renderer/kel_vtk_renderer.cpp @@ -0,0 +1,80 @@ +#include <vtkCamera.h> +#include <vtkSmartPointer.h> +#include <vtkStructuredPointsReader.h> // Use vtkXMLStructuredGridReader for .vts +#include <vtkStructuredPoints.h> +#include <vtkPolyDataMapper.h> +#include <vtkDataSetSurfaceFilter.h> +#include <vtkActor.h> +#include <vtkRenderer.h> +#include <vtkRenderWindow.h> +#include <vtkWindowToImageFilter.h> +#include <vtkPNGWriter.h> +#include <sstream> +#include <iomanip> + +int main() +{ + // Renderer & offscreen window + auto renderer = vtkSmartPointer<vtkRenderer>::New(); + renderer->SetBackground(0.1, 0.2, 0.4); + + auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); + renderWindow->AddRenderer(renderer); + renderWindow->SetSize(800, 600); + renderWindow->OffScreenRenderingOn(); // No GUI + + auto windowToImage = vtkSmartPointer<vtkWindowToImageFilter>::New(); + windowToImage->SetInput(renderWindow); + windowToImage->SetInputBufferTypeToRGB(); + windowToImage->ReadFrontBufferOff(); + + auto writer = vtkSmartPointer<vtkPNGWriter>::New(); + writer->SetInputConnection(windowToImage->GetOutputPort()); + + // Camera setup (fixed) + renderer->GetActiveCamera()->SetPosition(0, 0, 10); + renderer->GetActiveCamera()->SetFocalPoint(0, 0, 0); + renderer->ResetCamera(); + + int startIndex = 0; + int endIndex = 1024; // adjust to your sequence length + + for (int i = startIndex; i <= endIndex; ++i) + { + // Format input filename + std::ostringstream vtkFile; + vtkFile << "poiseulle_2d_gpu_" << (i*4) << ".vtk"; + + // Read structured points (equidistant grid) + auto reader = vtkSmartPointer<vtkStructuredPointsReader>::New(); + reader->SetFileName(vtkFile.str().c_str()); + reader->Update(); + + // Convert structured grid to surface for rendering + auto surfaceFilter = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); + surfaceFilter->SetInputConnection(reader->GetOutputPort()); + surfaceFilter->Update(); + + auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); + mapper->SetInputConnection(surfaceFilter->GetOutputPort()); + + auto actor = vtkSmartPointer<vtkActor>::New(); + actor->SetMapper(mapper); + + // Clear previous frame + renderer->RemoveAllViewProps(); + renderer->AddActor(actor); + + // Render offscreen + renderWindow->Render(); + windowToImage->Modified(); + + // Save PNG + std::ostringstream pngFile; + pngFile << "tmp/png/frame_" << std::setw(8) << std::setfill('0') << i << ".png"; + writer->SetFileName(pngFile.str().c_str()); + writer->Write(); + } + + return 0; +} |
