working on rendering bg image; rudimentary version complete
This commit is contained in:
parent
985fd6b9ed
commit
57815c64ac
|
|
@ -9,6 +9,10 @@ find_package(VTK COMPONENTS
|
||||||
CommonCore
|
CommonCore
|
||||||
CommonDataModel
|
CommonDataModel
|
||||||
FiltersGeneral
|
FiltersGeneral
|
||||||
|
FiltersGeometry
|
||||||
|
FiltersProgrammable
|
||||||
|
IOImage
|
||||||
|
ImagingSources
|
||||||
InteractionStyle
|
InteractionStyle
|
||||||
RenderingContextOpenGL2
|
RenderingContextOpenGL2
|
||||||
RenderingCore
|
RenderingCore
|
||||||
|
|
@ -16,7 +20,6 @@ find_package(VTK COMPONENTS
|
||||||
RenderingGL2PSOpenGL2
|
RenderingGL2PSOpenGL2
|
||||||
RenderingOpenGL2
|
RenderingOpenGL2
|
||||||
CommonColor
|
CommonColor
|
||||||
FiltersGeometry
|
|
||||||
RenderingCore)
|
RenderingCore)
|
||||||
|
|
||||||
if (NOT VTK_FOUND)
|
if (NOT VTK_FOUND)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,18 @@
|
||||||
#include <vtkCamera.h>
|
#include <vtkCamera.h>
|
||||||
#include <vtkDoubleArray.h>
|
#include <vtkDoubleArray.h>
|
||||||
#include <vtkMapper2D.h>
|
#include <vtkMapper2D.h>
|
||||||
|
#include <vtkImageReader2.h>
|
||||||
|
#include <vtkImageData.h>
|
||||||
|
#include <vtkImageActor.h>
|
||||||
|
#include <vtkImageReader2Factory.h>
|
||||||
#include <vtkNamedColors.h>
|
#include <vtkNamedColors.h>
|
||||||
#include <vtkNew.h>
|
#include <vtkNew.h>
|
||||||
#include <vtkPolyDataMapper.h>
|
#include <vtkPolyDataMapper.h>
|
||||||
#include <vtkPolyDataMapper2D.h>
|
#include <vtkPolyDataMapper2D.h>
|
||||||
|
#include <vtkProgrammableGlyphFilter.h>
|
||||||
|
#include <vtkSmartPointer.h>
|
||||||
#include <vtkProperty.h>
|
#include <vtkProperty.h>
|
||||||
|
#include <vtkProperty2D.h>
|
||||||
#include <vtkRectilinearGrid.h>
|
#include <vtkRectilinearGrid.h>
|
||||||
#include <vtkRectilinearGridGeometryFilter.h>
|
#include <vtkRectilinearGridGeometryFilter.h>
|
||||||
#include <vtkRenderWindow.h>
|
#include <vtkRenderWindow.h>
|
||||||
|
|
@ -15,6 +22,7 @@
|
||||||
#include <vtkRenderer.h>
|
#include <vtkRenderer.h>
|
||||||
|
|
||||||
#include <netcdf>
|
#include <netcdf>
|
||||||
|
#include <vtkVertexGlyphFilter.h>
|
||||||
|
|
||||||
#define NLATS 67
|
#define NLATS 67
|
||||||
#define NLONS 116
|
#define NLONS 116
|
||||||
|
|
@ -46,49 +54,107 @@ tuple<vector<int>, vector<double>, vector<double>> readGrid() {
|
||||||
return {time, latitude, longitude};
|
return {time, latitude, longitude};
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
|
||||||
vtkNew<vtkNamedColors> colors;
|
|
||||||
|
|
||||||
|
void renderCoordinates(vtkRenderer *ren, vtkNamedColors *colors) {
|
||||||
|
|
||||||
vtkNew<vtkDoubleArray> pCoords;
|
vtkNew<vtkPoints> points;
|
||||||
pCoords->SetNumberOfComponents(3);
|
|
||||||
pCoords->SetNumberOfTuples(NLATS*NLONS);
|
|
||||||
auto [times, lats, lons] = readGrid();
|
auto [times, lats, lons] = readGrid();
|
||||||
|
|
||||||
double i = 0;
|
double i = 0;
|
||||||
for (double lat : lats) {
|
for (double lat : lats) {
|
||||||
for (double lon : lons) {
|
for (double lon : lons) {
|
||||||
pCoords->InsertTuple3(i++, 0, lat, lon);
|
cout << "lat: " << (lat*1000-46125)*661/16500 << "\t lon: " << (lon*1000+15875)*661/28750 << endl;
|
||||||
|
points->InsertNextPoint((lat*1000-46125)*661/16500, (lon*1000+15875)*661/28750, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
vtkNew<vtkPoints> points;
|
|
||||||
points->SetData(pCoords);
|
|
||||||
|
|
||||||
vtkNew<vtkPolyData> polydata;
|
vtkNew<vtkPolyData> polydata;
|
||||||
polydata->SetPoints(points);
|
polydata->SetPoints(points);
|
||||||
|
|
||||||
|
vtkNew<vtkVertexGlyphFilter> glyphFilter;
|
||||||
|
glyphFilter->SetInputData(polydata);
|
||||||
|
glyphFilter->Update();
|
||||||
|
|
||||||
vtkNew<vtkPolyDataMapper2D> mapper;
|
vtkNew<vtkPolyDataMapper2D> mapper;
|
||||||
mapper->SetInputData(polydata);
|
mapper->SetInputConnection(glyphFilter->GetOutputPort());
|
||||||
mapper->SetScalarRange(0, 40);
|
mapper->Update();
|
||||||
|
|
||||||
vtkNew<vtkActor2D> actor;
|
vtkNew<vtkActor2D> actor;
|
||||||
actor->SetMapper(mapper);
|
actor->SetMapper(mapper);
|
||||||
|
actor->GetProperty()->SetColor(colors->GetColor3d("Gold").GetData());
|
||||||
|
actor->GetProperty()->SetPointSize(3);
|
||||||
|
|
||||||
vtkNew<vtkRenderer> ren;
|
|
||||||
ren->AddActor(actor);
|
ren->AddActor(actor);
|
||||||
ren->SetBackground(colors->GetColor3d("DarkSlateGray").GetData());
|
}
|
||||||
|
|
||||||
|
void renderBackground(vtkRenderer *background) {
|
||||||
|
vtkSmartPointer<vtkImageData> imageData;
|
||||||
|
|
||||||
|
vtkNew<vtkImageReader2Factory> readerFactory;
|
||||||
|
vtkSmartPointer<vtkImageReader2> imageReader;
|
||||||
|
|
||||||
|
imageReader.TakeReference(readerFactory->CreateImageReader2("../../../../data/map_661-661.png"));
|
||||||
|
imageReader->SetFileName("../../../../data/map_661-661.png");
|
||||||
|
imageReader->Update();
|
||||||
|
imageData = imageReader->GetOutput();
|
||||||
|
|
||||||
|
vtkNew<vtkImageActor> imageActor;
|
||||||
|
imageActor->SetInputData(imageData);
|
||||||
|
|
||||||
|
background->AddActor(imageActor);
|
||||||
|
|
||||||
|
|
||||||
|
// camera stuff
|
||||||
|
// essentially sets the camera to the middle of the background, and points it at the background
|
||||||
|
double origin[3], spacing[3];
|
||||||
|
int extent[6];
|
||||||
|
imageData->GetOrigin(origin);
|
||||||
|
imageData->GetSpacing(spacing);
|
||||||
|
imageData->GetExtent(extent);
|
||||||
|
|
||||||
|
vtkCamera *camera = background->GetActiveCamera();
|
||||||
|
camera->ParallelProjectionOn();
|
||||||
|
|
||||||
|
double xc = origin[0] + 0.5 * (extent[0] + extent[1]) * spacing[0];
|
||||||
|
double yc = origin[1] + 0.5 * (extent[2] + extent[3]) * spacing[1];
|
||||||
|
double yd = (extent[3] - extent[2] + 1) * spacing[1];
|
||||||
|
double d = camera->GetDistance();
|
||||||
|
camera->SetParallelScale(0.5 * yd);
|
||||||
|
camera->SetFocalPoint(xc, yc, 0.0);
|
||||||
|
camera->SetPosition(xc, yc, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
vtkNew<vtkNamedColors> colors;
|
||||||
|
vtkNew<vtkRenderer> Euler, Background, Lagrange;
|
||||||
|
Euler->SetBackground(colors->GetColor3d("DarkSlateGray").GetData());
|
||||||
|
|
||||||
|
|
||||||
|
Background->SetLayer(0);
|
||||||
|
Background->InteractiveOff();
|
||||||
|
Euler->SetLayer(1);
|
||||||
|
Euler->InteractiveOff();
|
||||||
|
Lagrange->SetLayer(2);
|
||||||
|
|
||||||
|
renderCoordinates(Euler, colors);
|
||||||
|
renderBackground(Background);
|
||||||
|
|
||||||
vtkNew<vtkRenderWindow> renWin;
|
vtkNew<vtkRenderWindow> renWin;
|
||||||
renWin->AddRenderer(ren);
|
renWin->SetNumberOfLayers(3);
|
||||||
renWin->SetSize(900, 600);
|
// renWin->SetNumberOfLayers(2);
|
||||||
|
renWin->AddRenderer(Background);
|
||||||
|
renWin->AddRenderer(Euler);
|
||||||
|
renWin->AddRenderer(Lagrange);
|
||||||
|
renWin->SetWindowName("Simulation");
|
||||||
|
renWin->SetSize(661, 661);
|
||||||
|
|
||||||
vtkNew<vtkRenderWindowInteractor> iren;
|
vtkNew<vtkRenderWindowInteractor> iren;
|
||||||
iren->SetRenderWindow(renWin);
|
iren->SetRenderWindow(renWin);
|
||||||
|
|
||||||
|
renWin->Render();
|
||||||
iren->Start();
|
iren->Start();
|
||||||
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue