0

次のように VTK でメッシュ モデルをレンダリングしています。

string mesh_filename = "mesh.ply";

vtkSmartPointer<vtkPLYReader> mesh_reader = read_mesh_ply(mesh_filename);
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(mesh_reader->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);

renderWindow->SetSize(640, 480);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);

//Add the actors to the scene
renderer->AddActor(actor);
renderer->SetBackground(1, 1, 1);

次のように呼び出してカメラを設定しようとしています:

vtkSmartPointer<vtkCamera> camera = vtkSmartPointer<vtkCamera>::New();
renderer->SetActiveCamera(camera);
camera->SetPosition(0, 650, 0);

次に、次を呼び出してシーンをレンダリングします。

renderWindow->Render();
renderWindowInteractor->Start();

問題は、この透視投影では、モデルがこの視点で表示されないことです。次のように呼び出して、錐台の近距離と遠距離の値を取得および設定できます。

double near, far;
camera->GetClippingRange(near, far);
near = 0.001;
far = 1000000;
camera->GetClippingRange(near, far);

しかし、まだモデルは表示されません。上下左右を変える必要はありますか?もしそうなら、どうすればいいですか?

編集:

焦点、ビューアップ、カメラの位置を設定し、クリッピング範囲を大きくしましたが、まだオブジェクトが見えません:

camera->SetFocalPoint(0,0,0);
camera->SetViewUp(0,1,0);
camera->SetPosition(0,650,0);

renderer->ResetCameraClippingRange(-10000,100000,-100000,100000,100000,0.0001);
4

1 に答える 1

4

カメラの位置は、焦点、位置、およびアップ ベクトルによって定義されます。モデルを表示するには、モデルの近くに焦点を合わせて、カメラがモデルを見るようにします。他のすべてが機能している場合、カメラが間違った方向を向いている可能性があります。

vtkCameraメソッドのオーバーロードでカメラのフォーカスを設定できますSetFocalPoint

また、カメラを変更してすべての可視アクターを表示するvtkRenderer方法を試すこともできます。ResetCamera()

于 2013-07-17T16:27:48.733 に答える