#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkCellArray.h"
#include "vtkInteractorStyle.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include <Windows.h>
#include <sstream>
#include <string>
using namespace std;
int main()
{
double camera_pos[3] = {0, 0, 1};
double camera_foc[3] = {0, 0, 0};
double camera_ang = 120;
double point_path[12][2] = {
{0, 0}, {0.3, 0.5}, {0.6, 0.8}, {1., 1.}, {1.4, 0.8}, {1.7, 0.5},
{2., 0.}, {1.7, -0.5}, {1.4, -0.8}, {1, -1.}, {0.7, -0.8}, {0.3, -0.5}};
vtkRenderWindow* renderWindow = vtkRenderWindow::New();
vtkIdType idtype;
double x, y, z;
vtkPoints* points = vtkPoints::New();
points->SetNumberOfPoints(1);
vtkCellArray* cells = vtkCellArray::New();
/*vtkIdType id = 0;
cells->InsertNextCell(1, &id);*/
cells->InsertNextCell(1);
cells->InsertCellPoint(0);
vtkPolyData* polyData = vtkPolyData::New();
polyData->SetPoints(points);
polyData->SetVerts(cells);
vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
mapper->SetInputData(polyData);
vtkActor* actor = vtkActor::New();
actor->SetMapper(mapper);
actor->GetProperty()->SetColor(0.0, 1.0, 0.0);
actor->GetProperty()->SetPointSize(3);
vtkRenderer* renderer = vtkRenderer::New();
renderer->AddActor(actor);
renderer->GetActiveCamera()->SetPosition(camera_pos);
renderer->GetActiveCamera()->SetFocalPoint(camera_foc);
renderer->GetActiveCamera()->SetViewAngle(camera_ang);
renderWindow->AddRenderer(renderer);
for (int i = 0; i < 100; i++)
{
vtkIdType idtype;
double x, y, z;
x = point_path[i % 12][0] - 0.02 * i;
y = point_path[i % 12][1];
z = 0;
points->SetPoint(0, x, y, z);
points->Modified(); // 标记 points 为已修改
renderWindow->Render(); // 重新渲染场景
Sleep(50);
}
cells->Delete();
points->Delete();
polyData->Delete();
mapper->Delete();
actor->Delete();
renderer->Delete();
renderWindow->Delete();
return 0;
}
由于帖子回复不能多行代码,特意写本帖,原贴地址VTK实时变化刷新,动态点显示_vtk 改变renderwindow更新-优快云博客。