#include #include #include // Use vtkXMLStructuredGridReader for .vts #include #include #include #include #include #include #include #include #include #include int main() { // Renderer & offscreen window auto renderer = vtkSmartPointer::New(); renderer->SetBackground(0.1, 0.2, 0.4); auto renderWindow = vtkSmartPointer::New(); renderWindow->AddRenderer(renderer); renderWindow->SetSize(800, 600); renderWindow->OffScreenRenderingOn(); // No GUI auto windowToImage = vtkSmartPointer::New(); windowToImage->SetInput(renderWindow); windowToImage->SetInputBufferTypeToRGB(); windowToImage->ReadFrontBufferOff(); auto writer = vtkSmartPointer::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::New(); reader->SetFileName(vtkFile.str().c_str()); reader->Update(); // Convert structured grid to surface for rendering auto surfaceFilter = vtkSmartPointer::New(); surfaceFilter->SetInputConnection(reader->GetOutputPort()); surfaceFilter->Update(); auto mapper = vtkSmartPointer::New(); mapper->SetInputConnection(surfaceFilter->GetOutputPort()); auto actor = vtkSmartPointer::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; }