[英]Modifying the polyData points/vertices in VTK
我正在嘗試使用VTK來更改點,即我正在以(+ 1 / -1)值更改坐標(x,y,z)。 我正在讀取.OBJ文件,然后訪問模型的點,並且在嘗試可視化模型中的更改時,RenderWindow沒有顯示任何內容。 下面是我的代碼:
vtkSmartPointer<vtkOBJReader> reader = vtkSmartPointer<vtkOBJReader>::New();
reader->SetFileName(filename.c_str());
reader->Update();
vtkSmartPointer<vtkPolyData> polyData = reader->GetOutput();
polyData->Update();
Point3d point;
std::vector<Point3d> vertices;
double p[3];
vtkPoints* points = vtkPoints::New();
vtkDoubleArray* pcoord = vtkDoubleArray::New();
pcoord->SetNumberOfComponents(3);
pcoord->SetNumberOfTuples(polyData->GetNumberOfPoints());
for(vtkIdType i = 0; i < polyData->GetNumberOfPoints(); i++)
{
polyData->GetPoint(i,p);
p[0] +=1;
p[1] +=1;
p[2] +=1;
pcoord->SetTuple(i, p);
}
points->SetData(pcoord);
polyData->SetPoints(points);
polyData->Modified();
//Visualize Code
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
vtkRenderWindow* renderWindow = vtkRenderWindow::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindowInteractor->Initialize();
renderWindowInteractor->Start();
我是3D和VTK的新手,請檢查缺少的位置,因為我想更改每個頂點(x,y,z)的坐標。 我還需要進一步更改其他內容嗎?
非常感謝。
首先,您在問題中包含的代碼中存在對齊問題。 我相信您也缺少for循環。 (在哪里定義“ i”?)
主要問題是您根本沒有渲染polyData。 您要呈現的唯一內容是.obj文件中的內容。 從這一行可以看出:
mapper->SetInputConnection(reader->GetOutputPort());
為了渲染polyData,將以上行替換為:
mapper->SetInputData(polyData);
這假設polyData是正確創建的。 我無法從您提供的代碼中輕易看出這一點。
這是一個可能有幫助的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.