VTK教程2--------最简单的VTK程序分析

talk is cheap, show me the code。
下面是官方example中的第一个,也是最简单一个,我把英文注释删除了,按照自己的理解加了中文注释。

  vtkConeSource *cone = vtkConeSource::New();
  cone->SetHeight( 3.0 );
  cone->SetRadius( 1.0 );
  cone->SetResolution( 10 );   //准备需要渲染的数据

  vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();  //创建映射器
  coneMapper->SetInputConnection( cone->GetOutputPort() );   //将准备的数据连接到映射器

  vtkActor *coneActor = vtkActor::New();
  coneActor->SetMapper( coneMapper );  //创建一个演员来代表数据

  vtkRenderer *ren1= vtkRenderer::New();
  ren1->AddActor( coneActor );  //创建一个渲染器添加演员
  ren1->SetBackground( 0.1, 0.2, 0.4 );  //设置背景色

  // 创建渲染窗口来显示数据
  vtkRenderWindow *renWin = vtkRenderWindow::New();
  renWin->AddRenderer( ren1 );
  renWin->SetSize( 300, 300 );  //设置渲染窗口的大小

  // 接下来将actor逐渐旋转,每次旋转1°
  int i;
  for (i = 0; i < 360; ++i)
  {
    renWin->Render();
    // 每次旋转1°
    ren1->GetActiveCamera()->Azimuth( 1 );
  }

按照pipeline的思维导图,连接如下:
VTK教程2--------最简单的VTK程序分析_第1张图片
假如说,我们需要在窗口中渲染两个cone怎么办呢?
首先,肯定需要两个vtkConeSource,也需要两个vtkActor,同样也需要两个vtkPolyDataMapper,那么来做一个实验,在example上新增上述三个类,注意为了避免两个图形重合,需要进行些许修改,代码如下:

  vtkConeSource *cone = vtkConeSource::New();
  cone->SetHeight( 3.0 );
  cone->SetRadius( 1.0 );
  cone->SetResolution( 10 );
  cone->SetCenter(-2.0,-0.0,-0.0);  //修改了图形的原点


  vtkConeSource *cone1 = vtkConeSource::New();
  cone1->SetHeight(3.0);
  cone1->SetRadius(1.0);
  cone1->SetResolution(10);
  cone1->SetCenter(0.0,0.0,0.0);  //图形原点

同样的,再新增以下代码:

  vtkPolyDataMapper *coneMapper1 = vtkPolyDataMapper::New();
  coneMapper1->SetInputConnection(cone1->GetOutputPort());

  vtkActor *coneActor1 = vtkActor::New();
  coneActor1->SetMapper(coneMapper1);

  ren1->AddActor(coneActor1);

最终得到的结果如下图所示:
VTK教程2--------最简单的VTK程序分析_第2张图片
好了,理解了cone的渲染就知道了vtk的编程模型了。
如果没有完全理解,可以再把cone开头的几个example再消化一下。
更多VTK教程,请VX搜索CodeKit。

你可能感兴趣的:(VTK教程)