1
我用vtkGenericDataObjectReader類讀取其中只包含點位置和VTK_TETRA細胞.vtk文件:如何從.vtk文件中提取點法線?
# vtk DataFile Version 2.0
Unstructured Grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 19002 double
-0.150669 0.33708199999999999 -0.053355
0.240651 -0.40023399999999998 -0.183224
-0.15488199999999999 -0.54804799999999998 -0.210316
... the other points ...
CELLS 75753 378765
4 3472 3996 7922 9626
4 5182 6191 12063 12612
4 5555 2996 18404 18616
... the other cells ...
後成功讀取該文件,我沒有通過獲得分數法線:
VTK_CREATE(vtkGenericDataObjectReader, reader);
reader->SetFileName(file.toStdString().c_str());
reader->Update();
Q_ASSERT(reader->IsFileUnstructuredGrid());
VTK_CREATE(vtkUnstructuredGrid, ug);
ug = vtkUnstructuredGrid::SafeDownCast(reader->GetOutput());
vtkDataArray* normals = ug->GetPointData()->GetArray("Normals");
//vtkDataArray* normals = ug->GetPointData()->GetNormals();
VTK_CREATE(vtkDataSetMapper, modelMapper);
modelMapper->SetInputData(ug);
modelActor->SetMapper(modelMapper);
// ...
因爲法線必須是零指針。
但是,最終渲染的照明效果似乎是合理的。所以這裏是我的問題:(1)VTK計算點法線如何獲得正確的光效果? (2)我應該怎麼做才能獲得點正常?
在我的情況下,「reader」的輸出是vtkUnstructuredGrid類型的輸入,但是「規範」輸入需要vtkPolyData,所以vtkPolyDataNormals在這裏不起作用。 – blldw
我剛剛做了一個編輯。 'reader-> GetOutputPort()',使用該解決方案時,您使用的是vtk管道,而不是使用網格的臨時實例。或者你必須在最後完成一個vtkUnstructuredGrid嗎? vtkPolyDataNormals有一個從vtkPolyDataAlgorithm繼承的'SetInputData'方法,它可以接受任何'vtkDataObject *' – Marcassin