VTK草稿1

作者: yzld2002 | 来源:发表于2015-09-20 16:12 被阅读0次

    VTK是什么

    实际上是基于OpenGL的图形开发函数库。

    • OpenGL + OOP
    • C++作为核心, 有Tcl、Python、Java的接口
    • 支持多种数据类型
    • Open Source

    VTK典型流程

    ** Data --> Geometry --> Image **

    直观流程 程序流程.png

    左边一纵列对应Data --> Gemoetry
    右边一纵列对应Gemotry --> Image

    Data --> Geometry

    包括vtkSource, vtkFilter, vtkMapper

    • vtkSource : 各类图形的数字构成,以及各种图像文件的读写数据等
    • vtkFilter : 以数据对象作为输入,输出处理后的数据对象。实现各种图像处理算法。
    • vtkMapper : 将Data转换为Gemoetry数据,作为下一步显示的图形来源。vtkMapper接收Filter的输入,但不产生输出。整体作为下一步处理的基础。

    Geometry --> Image

    包括vtkActor, vtkRenderer, vtkRenderWindow

    Geometry --> Image
    • vtkActor : 代表了一个在场景中被渲染的物体,例如一个锥体或一个立方体,自身可以设定多个属性,如坐标、旋转角度、表明材质、反光效果、透明度等等
    • vtkRenderer : 负责渲染物体的进程,可以设置显示角度、光照角度等等属性
    • vtkRenderWindow : 在操作系统上显示的一个窗口,可以包含一个或者多个vtkRenderer,上图中左边那个窗口中就有两个Renderer

    整体流水线

    Pipeline.png

    Example

    /*=========================================================================
    
      Program:   Visualization Toolkit
      Module:    Cone.cxx
    
      Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
      All rights reserved.
      See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
    
         This software is distributed WITHOUT ANY WARRANTY; without even
         the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
         PURPOSE.  See the above copyright notice for more information.
    
    =========================================================================*/
    //
    // This example creates a polygonal model of a cone, and then renders it to
    // the screen. It will rotate the cone 360 degrees and then exit. The basic
    // setup of source -> mapper -> actor -> renderer -> renderwindow is
    // typical of most VTK programs.
    //
    
    // First include the required header files for the VTK classes we are using.
    #include "vtkConeSource.h"
    #include "vtkPolyDataMapper.h"
    #include "vtkRenderWindow.h"
    #include "vtkCamera.h"
    #include "vtkActor.h"
    #include "vtkRenderer.h"
    
    int main()
    {
      //
      // Next we create an instance of vtkConeSource and set some of its
      // properties. The instance of vtkConeSource "cone" is part of a
      // visualization pipeline (it is a source process object); it produces data
      // (output type is vtkPolyData) which other filters may process.
      //
      vtkConeSource *cone = vtkConeSource::New();
      cone->SetHeight( 3.0 );
      cone->SetRadius( 1.0 );
      cone->SetResolution( 10 );
    
      //
      // In this example we terminate the pipeline with a mapper process object.
      // (Intermediate filters such as vtkShrinkPolyData could be inserted in
      // between the source and the mapper.)  We create an instance of
      // vtkPolyDataMapper to map the polygonal data into graphics primitives. We
      // connect the output of the cone souece to the input of this mapper.
      //
      vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
      coneMapper->SetInputConnection( cone->GetOutputPort() );
    
      //
      // Create an actor to represent the cone. The actor orchestrates rendering
      // of the mapper's graphics primitives. An actor also refers to properties
      // via a vtkProperty instance, and includes an internal transformation
      // matrix. We set this actor's mapper to be coneMapper which we created
      // above.
      //
      vtkActor *coneActor = vtkActor::New();
      coneActor->SetMapper( coneMapper );
    
      //
      // Create the Renderer and assign actors to it. A renderer is like a
      // viewport. It is part or all of a window on the screen and it is
      // responsible for drawing the actors it has.  We also set the background
      // color here.
      //
      vtkRenderer *ren1= vtkRenderer::New();
      ren1->AddActor( coneActor );
      ren1->SetBackground( 0.1, 0.2, 0.4 );
    
      //
      // Finally we create the render window which will show up on the screen.
      // We put our renderer into the render window using AddRenderer. We also
      // set the size to be 300 pixels by 300.
      //
      vtkRenderWindow *renWin = vtkRenderWindow::New();
      renWin->AddRenderer( ren1 );
      renWin->SetSize( 300, 300 );
    
      //
      // Now we loop over 360 degreeees and render the cone each time.
      //
      int i;
      for (i = 0; i < 360; ++i)
        {
        // render the image
        renWin->Render();
        // rotate the active camera by one degree
        ren1->GetActiveCamera()->Azimuth( 1 );
        }
    
      //
      // Free up any objects we created. All instances in VTK are deleted by
      // using the Delete() method.
      //
      cone->Delete();
      coneMapper->Delete();
      coneActor->Delete();
      ren1->Delete();
      renWin->Delete();
    
      return 0;
    }
    

    相关文章

      网友评论

        本文标题:VTK草稿1

        本文链接:https://www.haomeiwen.com/subject/otxicttx.html