VTKによる3Dオブジェクトの幾何学変換
はじめに
VTKで3Dオブジェクト(vtkPolyData
)を並進や回転などの
幾何学変換を行う方法について,公式サンプルを元にして解説する.
手順としてはまず変換に関するクラスのオブジェクトを生成し,変換に関するプロパティを設定する.その変換を行うオブジェクト(vtkTransformPolyDataFilter
)で変換を実行する.
並進と回転の変換
3Dオブジェクト(vtkPolyData
)を並進・回転させるためには,vtkTransform
を用いる.
vtkSmartPointer<vtkTransform> tra = vtkSmartPointer<vtkTransform>::New();
//並進
tra->Translate(5.0,5.0,5.0);//x, y, z方向の並進量
//回転
tra->RotateWXYZ(45, 0, 1, 0);//回転軸と回転量を指定.
tra->Update();
vtkMatrix4x4* matrix = tra->GetMatrix();//変換行列を取得.
3Dオブジェクト(vtkPolyData
)を変換を実行
vtkTransformPolyDataFilter
を用いる.
変換元のオブジェクト(vtkPolyData
)と変換(vtkTransform
, vtkLandmarkTransform
,vtkIterativeClosestPointTransform
など)をセットして,vtkTransformPolyDataFilter::GetOutput()
で変換したオブジェクトを得る.
vtkSmartPointer<vtkTransformPolyDataFilter> filter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
filter->SetInputData(polydata);//変換元のvtkPolyDataをセット.
filter->SetTransform(transform);//変換をセット..
filter->Update();
vtkPolyData* output = filter->GetOutput();//変換後
対応関係を用いた変換
vtkLandmarkTransform
を用いる.変形前後における対応関係が既知の点をvtkPoints
として,入力する.公式サンプル
vtkSmartPointer<vtkLandmarkTransform> landmark = vtkSmartPointer<vtkLandmarkTransform>::New();
//対応関係をセットする.
landmark->SetSourceLandmarks(sourcePoints);
landmark->SetTargetLandmarks(targetPoints);
landmark->SetModeToRigidBody();
landmark->Update();
vtkMatrix4x4* matrix = landmark->GetOutput();