修改VTK中的polyData点/顶点
Modifying the polyData points/vertices in VTK
我正在尝试使用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);
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是正确创建的。我无法从您提供的代码中轻易分辨出这一点。
下面是一个可能有所帮助的例子。
相关文章:
- 如何循环打印顶点结构
- D3D11-将混合权重和索引传递到顶点着色器
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 如何将一半传递给顶点着色器?
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 使用 OpenGL 4.5 更改所选顶点的颜色
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 创建异构顶点数据数组的可移植方法
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 无法从 cso 文件创建顶点着色器(从 fx 文件创建)
- OpenGL 相机移动程序顶点着色器问题
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- 为什么顶点数组对象会导致错误?
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 将顶点位置从顶点传递到片段着色器 - 仅在使用 Nsight 进行调试时有效
- FBX SDK 在预期 3 个顶点时返回 4 个顶点
- 修改VTK中的polyData点/顶点