summaryrefslogtreecommitdiff
path: root/util/vtk_renderer
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2025-12-21 20:53:50 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2025-12-21 20:53:50 +0100
commitb1d61c67c28a9ba4a1de834e401d97cfc9e84764 (patch)
treef84727c98f5bd41d6937d7936272120a2821e669 /util/vtk_renderer
parent3077dce642f110a3e010d154a9687310ab71de43 (diff)
downloadlibs-lbm-b1d61c67c28a9ba4a1de834e401d97cfc9e84764.tar.gz
Reworking some structures. adding particle tests again
Diffstat (limited to 'util/vtk_renderer')
-rw-r--r--util/vtk_renderer/.nix/derivation.nix25
-rw-r--r--util/vtk_renderer/Makefile12
-rw-r--r--util/vtk_renderer/kel_vtk_renderer.cpp80
3 files changed, 117 insertions, 0 deletions
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;
+}