C++ 使用VTK连接流媒体点
我有一个在循环中调用的函数,在每次传递时,它给出(x,y,z)一个3D点。我试图使用VTK实时连接这些点,但无法在每帧后刷新渲染窗口。如果我退出循环,我会看到一堆线 基本上,这就是我正在做的:C++ 使用VTK连接流媒体点,c++,user-interface,graphics,3d,vtk,C++,User Interface,Graphics,3d,Vtk,我有一个在循环中调用的函数,在每次传递时,它给出(x,y,z)一个3D点。我试图使用VTK实时连接这些点,但无法在每帧后刷新渲染窗口。如果我退出循环,我会看到一堆线 基本上,这就是我正在做的: // Create a vtkPoints object to store the points in it vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); vtkSmartPointe
// Create a vtkPoints object to store the points in it
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkPolyLine> polyLine = vtkSmartPointer<vtkPolyLine>::New();
// Create a cell array to store the lines in
vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
// Create a polydata to store everything in
vtkSmartPointer<vtkPolyData> linesPolyData = vtkSmartPointer<vtkPolyData>::New();
// Setup actor and mapper
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// Setup render window, renderer, and interactor
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderWindow->Render();
renderer->Render();
int numpoints = 0;
while(some_condition)
{
call_function(&x,&y,&z);
double point[3] = {0.0, 0.0, 0.0};
point[0] = (float)x;
point[1] = (float)y;
point[2] = (float)z;
numpoints++;
points->InsertNextPoint(point);
polyLine->GetPointIds()->SetNumberOfIds(numpoints);
for(unsigned int i = 0; i < num_points; i++)
{
polyLine->GetPointIds()->SetId(i,i);
}
lines->InsertNextCell(polyLine);
// Add the points to the dataset
linesPolyData->SetPoints(points);
// Add the lines to the dataset
linesPolyData->SetLines(lines);
#if VTK_MAJOR_VERSION <= 5
mapper->SetInput(linesPolyData);
#else
mapper->SetInputData(linesPolyData);
#endif
linesPolyData->Modified();
linesPolyData->Update();
renderWindow->Render();
renderer->Render();
renderWindowInteractor->Enable();
check_loop_exit_condition();
}
//创建vtkPoints对象以在其中存储点
vtkSmartPointer points=vtkSmartPointer::New();
vtkSmartPointer多段线=vtkSmartPointer::New();
//创建一个单元格数组以存储其中的行
vtkSmartPointer line=vtkSmartPointer::New();
//创建一个polydata以存储其中的所有内容
vtkSmartPointer linesPolyData=vtkSmartPointer::New();
//设置参与者和映射器
vtkSmartPointer映射器=vtkSmartPointer::New();
vtkSmartPointer=vtkSmartPointer::New();
actor->SetMapper(映射器);
//设置渲染窗口、渲染器和交互器
vtkSmartPointer=vtkSmartPointer::New();
vtkSmartPointer renderWindow=vtkSmartPointer::New();
renderWindow->AddRenderer(渲染器);
vtkSmartPointer renderWindowInteractor=vtkSmartPointer::New();
RenderWindowWinterActor->SetRenderWindow(renderWindow);
渲染器->AddActor(actor);
renderWindow->Render();
渲染器->渲染();
int numpoints=0;
while(某些情况)
{
调用函数&x、y和z);
双点[3]={0.0,0.0,0.0};
点[0]=(浮动)x;
点[1]=(浮动)y;
点[2]=(浮动)z;
numpoints++;
点->插入下一点(点);
多段线->GetPointIds()->SetNumberOfIds(numpoints);
for(无符号整数i=0;iGetPointId()->SetId(i,i);
}
lines->InsertNextCell(多段线);
//将点添加到数据集
linesPolyData->设定点(点);
//将行添加到数据集
linesPolyData->设置行(行);
#如果VTK\U主版本设置输入(linesPolyData);
#否则
映射器->设置输入数据(linesPolyData);
#恩迪夫
linesPolyData->Modified();
linesPolyData->Update();
renderWindow->Render();
渲染器->渲染();
renderWindowInteractor->Enable();
检查循环退出条件();
}
如果我在循环之外执行renderer->Render()
,我将获得所有的行(或者至少我认为是这样)。有人能找出我哪里出了问题吗?从,看来你不应该直接打电话
renderer->Render();
你只需要打电话
renderWindow->Render();
从,看来你不应该直接打电话
renderer->Render();
你只需要打电话
renderWindow->Render();