能否不设置SourceConnection直接使用vtkGlyph3D生成Glyph
结论
你当前的代码无法正常运行,vtkGlyph3D要求必须传入两个核心输入:放置Glyph的位置点集、Glyph的原型形状数据,你目前只提供了第一个输入,缺少原型形状的配置。
关于输入参数的说明
vtkGlyph3D的原型形状输入有两种传入方式,你不需要非得用内置的vtkCubeSource等源对象,自定义的vtkPolyData也可以直接使用:
- 如果你用的是
vtkAlgorithm子类(比如内置源、自定义的算法类)生成的形状,使用SetSourceConnection(算法对象->GetOutputPort())传入,这种方式支持VTK管线的自动更新 - 如果你已经有现成的
vtkPolyData对象作为Glyph原型,直接调用重载方法SetSourceData(你的原型polydata)即可,不需要手动转换为vtkAlgorithmOutput对象
常见误区提醒
如果你手里的polydata已经是包含完整三角面片、颜色的完整模型,你根本不需要使用vtkGlyph3D:vtkGlyph3D的作用是在指定的一组点的位置,批量生成重复的原型形状,如果是直接渲染现有模型,直接把polydata传给vtkPolyDataMapper即可,示例代码:
vtkNew<vtkPolyDataMapper> mapper; mapper->SetInputData(polydata); // 直接传入你构建好的带面片的polydata vtkNew<vtkActor> actor; actor->SetMapper(mapper); // 后续把actor添加到渲染器中即可正常渲染
确实需要使用vtkGlyph3D的正确示例
比如你需要在一组点的位置批量放置你自定义的三角面片作为Glyph,代码如下:
// 1. 先准备自定义的Glyph原型形状 vtkNew<vtkPoints> glyphPoints; glyphPoints->InsertNextPoint(0, 0, 0); glyphPoints->InsertNextPoint(1, 0, 0); glyphPoints->InsertNextPoint(0, 1, 0); vtkNew<vtkCellArray> glyphTriangles; glyphTriangles->InsertNextCell(3); glyphTriangles->InsertCellPoint(0); glyphTriangles->InsertCellPoint(1); glyphTriangles->InsertCellPoint(2); vtkNew<vtkPolyData> glyphProto; glyphProto->SetPoints(glyphPoints); glyphProto->SetPolys(glyphTriangles); // 2. 配置vtkGlyph3D vtkNew<vtkGlyph3D> glyph3D; glyph3D->SetInputData(positionPointsPolydata); // 传入要放置Glyph的位置点集 glyph3D->SetSourceData(glyphProto); // 传入你自定义的Glyph原型 glyph3D->SetColorModeToColorByScalar(); glyph3D->ScalingOff(); glyph3D->Update();
内容的提问来源于stack exchange,提问作者user1479670
相关产品推荐
相关产品推荐

