0

vtkActor でプリミティブを描画する必要がありますが、方法がわかりません。これにはopengl関数を使用できますか?この例http://www.vtk.org/Wiki/VTK/Examples/Cxx/Plotting/Diagramでは動作していますが、インタラクティブに描画する必要があります。回答ありがとうございます。

4

3 に答える 3

0

VTK を使用して画面にグリッドを描画する方法を探していたところ、次のコードを思いつきました。

vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkCellArray> lineIndices = vtkSmartPointer<vtkCellArray>::New();

for(int iIndex = 0, connectivityIndex = 0; iIndex <= m_resolution; ++iIndex, connectivityIndex += 4)
{
    double pointCoordinate = m_range[0] + (m_range[1] - m_range[0]) * (iIndex / static_cast<double>(m_resolution));
    points->InsertNextPoint(pointCoordinate, -m_range[1], 0.0);
    points->InsertNextPoint(pointCoordinate,  m_range[1], 0.0);

    points->InsertNextPoint(-m_range[1], pointCoordinate, 0.0);
    points->InsertNextPoint( m_range[1], pointCoordinate, 0.0);

    lineIndices->InsertNextCell(2);
    lineIndices->InsertCellPoint(connectivityIndex + 0);
    lineIndices->InsertCellPoint(connectivityIndex + 1);

    lineIndices->InsertNextCell(2);
    lineIndices->InsertCellPoint(connectivityIndex + 2);
    lineIndices->InsertCellPoint(connectivityIndex + 3);
}

vtkSmartPointer<vtkPolyData> data = vtkSmartPointer<vtkPolyData>::New();
data->SetPoints(points);
data->SetLines(lineIndices);

vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(data);

vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);

これは @shash コードに基づいており、動作しています。

于 2016-01-13T18:11:23.300 に答える
0

免責事項: テストされていないコードです! 私はこれを記憶から書いています。そのため、必要に応じてマニュアルをテストして読んでください。次のコードは 1 本の線を描画することに注意してください。パフォーマンス上の理由から、1 行ごとに Actor を作成するのではなく、お勧めします。1 つのアクタに複数のライン (すべてのラインではない場合) を作成します。ポイントを追加して正しいインデックスを設定するだけです...

vtkPoints* points = vtkPoints::New();
vtkCellArray* lineIndices = vtkCellArray::New();

points->InsertNextPoint( 0, 0, 0);
points->InsertNextPoint(10, 0, 0);

lineIndices->InsertNextCell(2);
lineIndices->InsertNextCellPoint(0); // indices to points array.
lineIndices->InsertNextCellPoint(1);

vtkPolyData* polyData = vtkPolyData::New();
polyData->SetPoints(points);
polyData->SetLines(lines);

// continue with standard mapper, actor setup...
于 2011-06-14T19:12:50.867 に答える