我可以在 vtk.js 中将我自己的法线设置为 polydata(行),它工作正常。但是当我尝试使用带有所述多数据的 TubeFilter 时,它不起作用;如果我不设置法线,我只能生成管子。调用后程序不运行任何代码tubeFilter.update()
。
我这样创建法线:
const numSegments = 1;
const normals = new Float32Array(3 * (numSegments + 1));
const normalArray = vtkDataArray.newInstance({
name: 'Normals',
values: normals,
numberOfComponents: 3,
});
for(let i=0; i<numSegments + 1; i++) {
normals[i*3+0] = 0;
normals[i*3+1] = 0;
normals[i*3+2] = 1;
}
并将其设置为 polydata,如下所示:
polyData.getPointData().setNormals(normalArray);
我这样创建管式过滤器:
const tubeFilter = vtkTubeFilter.newInstance();
tubeFilter.setCapping(false);
tubeFilter.setNumberOfSides(50);
tubeFilter.setRadius(0.1);
tubeFilter.setInputData(polyData);
tubeFilter.setInputArrayToProcess(0, 'Scalars', 'PointData', 'Scalars');
tubeFilter.update(); // Program stops here
为什么它不起作用?我究竟做错了什么?我该怎么做才能用我自己的法线生成管子?这是完整的代码:index.js ; 这是此示例的简化版本。
这是在没有设置法线时生成的管子线的图像(左),只有在设置法线时生成的线(右),因为代码在尝试生成管子后停止。