我正在尝试使用VTK来改变点,即我将坐标(x,y,z)改变为(+ 1 / -1)值。我正在读取.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);
olyData->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)的坐标。我是否还需要进一步改变其他内容?
非常感谢。
答案 0 :(得分:0)
首先,您在问题中包含的代码中存在对齐问题。我相信你也错过了一个for循环。 (“i”定义在哪里?)
主要问题是你根本没有渲染polyData。您渲染的唯一内容是.obj文件中的内容。显而易见:
mapper->SetInputConnection(reader->GetOutputPort());
为了渲染polyData,请将上一行替换为:
mapper->SetInputData(polyData);
这假设polyData已正确创建。我不能轻易地从您提供的代码中说出这一点。
Here是一个可能有用的示例。