何千ものvtkPlaneSourcesを作成して表示していますが、一度表示されるとグラフィックスが鈍いです。私はこの問題を克服するためにvtkGlyph3DまたはvtkGlyph3DMapperを使用しようとしていますが、面の向きに問題があります。私はそれが飛行機が定義されている方法によると思う。 vtkPlaneSourceは、これら2つの方法のいずれかによって定義される。VTK:Orient and Scale Many Plane
1)起源、POINT1 &ポイント2
2)中心&正常
コードは以下適切にスケールが、私はベース得られた面方位を理解していません私が指定した法線上で私は法線ベクトルを定義すると、私は法線に直交する平面を持つと仮定しました。飛行機が各軸に沿って配置されているように見えます。 vtkGlyph3DとvtkGlyph3DMapperは同じ挙動をします。
この場合、プレーンノーマルを正しく使用するにはどうすればよいですか?
(2)面がスケーリングされ、 "配向"(上記のコードの結果):
添付vtkSmartPointer<vtkPoints> glyphPoints =
vtkSmartPointer<vtkPoints>::New();
glyphPoints->InsertNextPoint(0, 0, 0);
glyphPoints->InsertNextPoint(2, 0, 0);
glyphPoints->InsertNextPoint(4, 0, 0);
vtkSmartPointer<vtkPolyData> polydata =
vtkSmartPointer<vtkPolyData>::New();
polydata->SetPoints(glyphPoints);
vtkSmartPointer<vtkDoubleArray> planeNormals =
vtkSmartPointer<vtkDoubleArray>::New();
planeNormals->SetName("orientArray");
planeNormals->SetNumberOfComponents(3); //3d normals (ie x,y,z)
planeNormals->SetNumberOfTuples(polydata->GetNumberOfPoints());
// Construct the normal vectors
double pN1[3] = { 1.0,0.0,0.0 };
double pN2[3] = { 0.0,1.0,0.0 };
double pN3[3] = { 0.0,0.0,1.0 };
// Add the data to the normals array
planeNormals->SetTuple(0, pN1);
planeNormals->SetTuple(1, pN2);
planeNormals->SetTuple(2, pN3);
polydata->GetPointData()->SetNormals(planeNormals);
vtkSmartPointer<vtkDoubleArray> scaleVectors =
vtkSmartPointer<vtkDoubleArray>::New();
scaleVectors->SetName("scaleArray"); //3d scaling
scaleVectors->SetNumberOfComponents(3); //3d scaling (ie x,y,z)
scaleVectors->SetNumberOfTuples(polydata->GetNumberOfPoints());
// Construct the scale vectors
double sV1[3] = { 1.0,2.0,1.0 };
double sV2[3] = { 1.0,3.0,1.0 };
double sV3[3] = { 1.5,4.0,1.0};
// Add the data to the vector array
scaleVectors->SetTuple(0, sV1);
scaleVectors->SetTuple(1, sV2);
scaleVectors->SetTuple(2, sV3);
polydata->GetPointData()->SetVectors(scaleVectors);
vtkSmartPointer<vtkPlaneSource> planeSource =
vtkSmartPointer<vtkPlaneSource>::New();
// Visualize
vtkSmartPointer<vtkGlyph3DMapper> glyph3Dmapper =
vtkSmartPointer<vtkGlyph3DMapper>::New();
glyph3Dmapper->SetSourceConnection(planeSource->GetOutputPort());
glyph3Dmapper->SetInputData(polydata);
glyph3Dmapper->SetScaleArray("scaleArray");
glyph3Dmapper->SetScaleModeToScaleByVectorComponents();
glyph3Dmapper->SetOrientationArray("orientArray");
glyph3Dmapper->Update();
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(glyph3Dmapper);
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->SetBackground(.3, .6, .3); // Background color green
renderWindow->Render();
renderWindowInteractor->Start();
のみスケーリング(1)面の画像であります
ご協力いただきありがとうございます。