VTK计算模型的切向量
计算切向量用到vtkPolyDataTangents这个函数,该函数的输入要求模型具有法向量和纹理坐标的数据信息,法向量使用vtkPolyDataNormals计算,纹理坐标使用vtkTextureMapToPlane计算。
将每个顶点切向量用箭头表示如下图:
- 核心代码:
vtkNew<vtkPolyDataNormals> normalFilter;
normalFilter->SetInputData(origin);
normalFilter->SetComputePointNormals(true);
vtkNew<vtkTextureMapToPlane> textureFilter;
textureFilter->SetInputConnection(normalFilter->GetOutputPort());
textureFilter->SetNormal(0, 0, 1);
vtkNew<vtkPolyDataTangents> tangentFilter;
tangentFilter->SetInputConnection(textureFilter->GetOutputPort());
tangentFilter->SetComputePointTangents(true);
tangentFilter->Update();
//提取模型切向量
auto tangents = tangentFilter->GetOutput()->GetPointData()->GetTangents();
tangentFilter->GetOutput()->GetPointData()->SetNormals(tangents);
//切向量可视化
vtkNew<vtkArrowSource> arrow;
arrow->Update();
vtkNew<vtkGlyph3D> glyph;
glyph->SetInputData(tangentFilter->GetOutput());
glyph->SetSourceData(arrow->GetOutput());
glyph->SetScaleFactor(1.0);
glyph->SetVectorModeToUseNormal();
glyph->Update();