You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:18:03