zoukankan      html  css  js  c++  java
  • 3D——VTK使用

    VTK有源码和二进制版本
    二进制版本,主要包括头文件,和库文件。主要用于直接使用VTK来开发自己的系统。
    二进制版本也是源码版,经过编译之后得到的

    如果安装源码版本的话,还需要自己编译,生成DLL或者LIB,特别麻烦。 

    不过也有些优点,就是我们需要GCC使用的库,就生成GCC格式的库;我们需要VC6的库,就能生成VC6需要的库。我们需要动态链接库,就生成动态链接库,我们需要静态链接库呢?就为我们生成静态链接库。

    不过一般人是不需要编译源代码的,因为那个太消耗时间了。建议还是晚上睡觉之前编译比较合适。

    我们自己用的话,直接安装二进制版本就可以啦。

    安装二进制版本
     
    1.复制文件(DLL,头文件,库文件)。
    2.修改环境变量(让OS自动找到VTK的DLL)。
     
    安装数据文件
    1.复制文件
    2.设置环境变量

    修改项目设置,包含VTK找到VTK头文件所在目录,找到VTK库文件所在目录。

    一、简要介绍
    VTK(Visualization Toolkit)是一款用于二次开发的可视化工具包,在世界上同类产品中最有影响,基本上可以作为可视化领域的规范。
    VTK的历史和现状:
    1993年12月,GE的Will Schroeder, Ken Martin两个人写了一本书: The Visualization Toolkit: An Object-Oriented Approach to 3D Graphics,VTK作为这本书的配套软件赠送。由于VTK的出色表现,人们对软件的关注程度远远超过了书,没有几年时间VTK就拥有了巨大的用户群。VTK现在是由kitware公司维护,以开源的形式开发,全世界所有的人都可以加入到开发者的行列。现在VTK的稳定版本是5.0,nightly 版本每天都会有更新。
    VTK的特点:Open Source。采用CVS版本控制跨平台。支持Windows、Unix、Linux、Mac等多种平台功能强大。适合几乎所有的可视化领域,从医学可视化到数据可视化,都能找到VTK的用户支持多种语言开发。c语言当然不用说了,还包括脚本语言,如TCL、Python,也支持Java具有强大的开发团队。包括多家开发单位,具有商业化的维护,具有来自全世界使用者的智力资源:)
    二、安装前的准备
    因为VTK是开源的,我们能从官方网站上得到它的源码,又因为它是跨平台的,我们就要对源码进行一些包装,才能被gcc vc6.0等不同编译器所接受。VTK使用的跨平台工具是CMake,它也是kitware公司的产品,可以从官方主页上获取。

    很多人不清楚cmake到底是干什么的,我这里想解释解释。我们下载的vtk源码都是用c++编写的,是一个大的工程,无论在什么平台,用什么编译器,你都要告诉编译器该如何去编译这么一个庞然大物。工程文件是工程的一般组织形式,比如vc6.0下面是dsw文件,gcc下可以把makefile看成这么一个东西。这些工程体系告诉编译器该干什么,需要什么样的参数等,好,cmake就是这样一个用来生成适合不同编译器所需要的工程文件的工具。 cmake为什么知道那些编译参数呢,这不得不提CMakeList.txt这个文件,正是这个文件,提供了这些信息,换句话说,如果没有CMakeList.txt,我们就不能使用cmake。有人又会问,如果不用cmake,可以编译vtk吗?那当然可以,比如在vc中,可以建立一个新的工程,把文件一个个往里面添加,编译选项也要自己加,在linux下,就自己写makefile,当然,这个方法几乎是无法实现的,就算实现,在今后的开发过程中还会遇到很多麻烦。所以,还是乖乖用cmake吧!

    安装前,需要获得下面的文件,我这里以vtk5.0为例,在winxp+vc6.0和linux+gcc下实现
    linxu:
    预安装gcc3.0
    vtk-5.0.0.tar.gz vtk的源码
    vtkdata-5.0.0.tar.gz vtk例子所需要的数据
    cmake-2.4.3-Linux-i386.tar.gz cmake程序,现在从官网上下载,是免编译的

    windows:
    预安装vc6.0
    vtk-5.0.0.zip vtk的源码
    vtkdata-5.0.0.zip vtk例子所需要的数据
    CMSetup243-win32.exe cmake安装程序
    上面不同系统下,vtk源码以及data其实是一样的,只不过使用了不同打包工具。另外,cmake版本的选择是根据vtk版本来定的,比如vtk5.0所需要的最低cmake版本好像是2.0,这里我们索性用更新的2.4。

    三、windows下的vtk安装
    1、安装cmake
    这个应该很简单吧,windows下安装软件是傻瓜化的,运行CMSetup243-win32.exe,不停地点击下一步就行了
    2、解压两个压缩包,建立所需文件夹
    我不喜欢直接在源码里编译,而是另外建立一个bin文件夹。比如我把c:\vtk\作为我们的主目录,将vtk源码解压在vtk5.0这个文件夹中,把data解压在vtkdata这个文件夹中,再建立一个空的文件夹取名为bin。注意,.\vtk5.0下面,应该就是一大堆文件夹和文件,.\vtkdata下面应该也可以发现几个子文件夹。

    3、运行cmake
    首先,将源码和编译工作目录两个目录添好,在这个例子中,sourse code目录是c:\vtk\vtk5.0\,build 目录是c:\vtk\bin\。
    再按configure按钮,cmake软件会让你选择需要使用的编译器,这里我们选vc6.0,然后,cmake就会对系统进行扫描了,停下来之后,我们就可以修改cmake选项了。
    修改cmake选项。这个环节还真不好说,一般vtk的初学者只需要用默认设置就行了。我只提醒一些比较重要的选项:
    build_examples: 就是询问是否编译vtk中的例子,如选则on,就要花时间把vtk的例子编译一遍,我一般不选
    build_testing: test code 就是vtk开发者用来测试 vtk代码的一些测试代码,我们常常把它们当成学习vtk的例子,与build_examples类似,是否编译他们,看个人喜好。

    build_shared_libs: 如果设置为off,就只会生成lib文件,用于开发肯定是够了。如果设置为on,将会多生成dll文件。他们的区别不是我这里说得清楚的,反正如果用静态库编程,应用程序可以独立运行,尺寸也比较大,如果用动态库编程,应用程序必须找到动态库才能运行,但尺寸可以做得比较小

    cmake_install_divfix: 这个比较重要,就是以后要安装vtk的路径。有些人又要问,我编译完了不就可以用vtk了吗,为什么还要安装?对,不安装其实可以,安装的好处就是可以从 1G多的文件中提取出.h .lib .dll等精华,安装在指定目录下,并修改系统环境变量

    vtk_data_root: 一般地,cmake可以自己找到vtkdata的路径,但如果没有,把c:\vtk\vtkdata\填上即可,告诉cmake,vtk需要的数据都在哪里

    vtk_use_parallel: 对于想用vtk做并行计算的朋友,要把这个选上,对于只想学学vtk的,保持默认off

    vtk_use_guisupport: 很多人把vtk安装好了,却无法运行vtk中与mfc混合编程的例子,提示错误都是缺少vtkmfc.lib,问题就出在这个选项,我们必须把它设置为 on,再次configure之后,会出现一个新的选项vtk_use_mfc,把它也设置为on就行了。

    提示:在cmake中,有些选项是依赖于另一些选项的,比如vtk_use_guisupport和vtk_use_mfc,当我们禁用vtk_use_guisupport,vtk_use_mfc是看不到的。

    修改完cmake选项以后,不停的按configure按钮,直到没有选项显示为红色,而且此时,ok按钮可用,点击ok按钮,就可以生成vc的工程文件了。

    4、用vc6.0编译
    用vc6.0打开bin目录下的vtk.dsw文件,因为文件很多,打开速度会有些慢。打开后,直接build。编译的用时和计算机性能,以及cmake中的一些选项有关,一般1个小时内可以完成。结果保存在.\bin\bin目录下。
    编译也会出现不成功的时候,就要看编译器提示的错误类型来处理了!

    5、安装
    用vc6.0打开bin目录下的install.dsp文件,不用理会提示的错误,直接build。编译结果就会安装在cmake_install_divfix设定的目录下。这个时候,把c:\vtk目录删除都行。当然,建议保留,也许以后还要更改cmake选项,再次修复编译呢。cmake会检查到改动,只处理改动过的地方,没有改动过的就不要重新编译了。

    四、在linux下的vtk安装
    linux下安装和windows下安装思路是一样的,我这里假设你已经基本熟悉linux的基本操作。

    1、安装cmake
    现在从官方网站上下载的cmake是免编译的,我们可以直接在cmake源码的bin文件夹下找到ccmake这个可执行文件。就算没有编译,自己动动手,编译一下吧。另外,最好把ccmake命令加入到系统可搜索的范围内,这样就能直接运行ccmake命令了。
    2、解压两个压缩包,建立所需文件夹
    同window下安装,指定一个主目录,比如~/vtk/,建立三个文件夹,解包。
    3、cmake
    cd ~/vtk/bin/
    ccmake ../vtk5.0
    修改cmake的选项也参考前面windows下的vtk安装,因为linux下的cmake是文字界面,所以操作起来不直观,功能还是没有少的。
    4、编译
    cd ~/vtk/bin/
    make
    make命令可以看成是gcc编译器调用makefile文件,进行编译
    5、安装
    cd ~/vtk/bin/
    sudo make install
    这里之所以用sudo,是因为一些文件的读写需要root权限
    五、总结
    学习vtk最好的教材是vtk user guide,最好的解决的难题的方法是通过vtk mail list 、qq、论坛、google等方式。

    VTK课程讲义分享
    http://www.cadcaecam.com/forum/read.php?tid-5297-fpage-4.html
    第四章 The Basics (VTK使用基础)
    http://www.cadcaecam.com/forum/read.php?tid-4850-fpage-2.html
    第六章 Visulizing Image & Volume Data(图像及三维体数据的可视化)
    http://www.cadcaecam.com/forum/read.php?tid-4861-fpage-2.html
    第11章 VTK中的数据对象接口(上)
    http://www.cadcaecam.com/forum/read.php?tid-4859-fpage-3.html
    第11章 VTK中的数据对象接口(下)
    http://www.cadcaecam.com/forum/read.php?tid-4860-fpage-2.html

    VTK示例程序

    Creating a Sphere

    C++

    #i nclude "vtkSphereSource.h"
    #i nclude "vtkPolyDataMapper.h"
    #i nclude "vtkActor.h"
    #i nclude "vtkRenderWindow.h"
    #i nclude "vtkRenderer.h"
    #i nclude "vtkRenderWindowInteractor.h"

    void main ()
    {

    // create sphere geometry
    vtkSphereSource *sphere = vtkSphereSource::New();
    sphere->SetRadius(1.0);
    sphere->SetThetaResolution(18);
    sphere->SetPhiResolution(18);

    // map to graphics library
    vtkPolyDataMapper *map = vtkPolyDataMapper::New();
    map->SetInput(sphere->GetOutput());

    // actor coordinates geometry, properties, transformation
    vtkActor *aSphere = vtkActor::New();
    aSphere->SetMapper(map);
    aSphere->GetProperty()->SetColor(0,0,1); // sphere color blue

    // a renderer and render window
    vtkRenderer *ren1 = vtkRenderer::New();
    vtkRenderWindow *renWin = vtkRenderWindow::New();
    renWin->AddRenderer(ren1);

    // an interactor
    vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
    iren->SetRenderWindow(renWin);

    // add the actor to the scene
    ren1->AddActor(aSphere);
    ren1->SetBackground(1,1,1); // Background color white

    // render an image (lights and cameras are created automatically)
    renWin->Render();

    // begin mouse interaction
    iren->Start();
    }

    Visualizing a Quadric Function

    C++

    #i nclude "vtkQuadric.h"
    #i nclude "vtkSampleFunction.h"
    #i nclude "vtkContourFilter.h"
    #i nclude "vtkOutlineFilter.h"
    #i nclude "vtkPolyDataMapper.h"
    #i nclude "vtkActor.h"
    #i nclude "vtkProperty.h"
    #i nclude "vtkRenderWindow.h"
    #i nclude "vtkRenderer.h"
    #i nclude "vtkRenderWindowInteractor.h"
    #i nclude "vtkImageData.h"

    void main ()
    {
    // -- create the quadric function object --

    // create the quadric function definition
    vtkQuadric *quadric = vtkQuadric::New();
    quadric->SetCoefficients(.5,1,.2,0,.1,0,0,.2,0,0);

    // sample the quadric function
    vtkSampleFunction *sample = vtkSampleFunction::New();
    sample->SetSampleDimensions(50,50,50);
    sample->SetImplicitFunction(quadric);

    // Create five surfaces F(x,y,z) = constant between range specified
    vtkContourFilter *contours = vtkContourFilter::New();
    contours->SetInput(sample->GetOutput());
    contours->GenerateValues(5, 0.0, 1.2);

    // map the contours to graphical primitives
    vtkPolyDataMapper *contMapper = vtkPolyDataMapper::New();
    contMapper->SetInput(contours->GetOutput());
    contMapper->SetScalarRange(0.0, 1.2);

    // create an actor for the contours
    vtkActor *contActor = vtkActor::New();
    contActor->SetMapper(contMapper);

    // -- create a box around the function to indicate the sampling volume --

    // create outline
    vtkOutlineFilter *outline = vtkOutlineFilter::New();
    outline->SetInput(sample->GetOutput());

    // map it to graphics primitives
    vtkPolyDataMapper *outlineMapper = vtkPolyDataMapper::New();
    outlineMapper->SetInput(outline->GetOutput());

    // create an actor for it
    vtkActor *outlineActor = vtkActor::New();
    outlineActor->SetMapper(outlineMapper);
    outlineActor->GetProperty()->SetColor(0,0,0);

    // -- render both of the objects --

    // a renderer and render window
    vtkRenderer *ren1 = vtkRenderer::New();
    vtkRenderWindow *renWin = vtkRenderWindow::New();
    renWin->AddRenderer(ren1);

    // an interactor
    vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
    iren->SetRenderWindow(renWin);

    // add the actors to the scene
    ren1->AddActor(contActor);
    ren1->AddActor(outlineActor);
    ren1->SetBackground(1,1,1); // Background color white

    // render an image (lights and cameras are created automatically)
    renWin->Render();

    // begin mouse interaction
    iren->Start();
    }

    VTK入门:

    vtk简介
    Vtk(visualization toolkit)是一个开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,650多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。 Vtk几乎可以在任何一个基于Unix的平台上操作,以及Windows 95/98/NT/2000/XP。
    vtk的结构
    Vtk比OpenGL和PEX高一个层面,这意味着在创建图形或可视化应用方面它将更加方便,更加简单。可以直接用C++,Tcl,Java,或Python各种语言编写的程序调用vtk。因为vtk的内核是C++,所以毫无疑问,使用C++调用vtk是最快的。但是使用解释型语言Tcl,Python(以及Tk),甚至附带GUI类库的Java语言也都能够很快的构建出所需的应用。
    Vtk的安装
    首先,你的电脑上应该装了Visual Studio .net(Visual Studio 6.0其实也可以,但是具体步骤要麻烦一些,后面写的是基于Visual Studio .net的),和WinZip(或WinRar)。
    第一步,到网站http://www.cmake.org 下载并安装CMSetup.exe。我用的版本是1.8.3,当然更新的也行。
    第二步,在http://public.kitware.com 或者ftp://public.kitware.com/pub/vtk下载vtk 4.2 或更新版本。以4.2版本为例,需要以下两个文件vtkNightlyData.zip,(Data无版本限制)VTK-4.2-LatestRelease.zip。将VTK-4.2-LatestRelease.zip解压缩到C:\,就有文件夹C:\VTK。将vtkNightlyData.zip解压缩到C:\,得到文件夹C:\VTKData。当然,也可以解压缩到其他的地方,这里只是以C盘为例,但是,注意路径长度不要超过260个字符。
    第三步,在ftp://public.kitware.com/pub/vtk/misc/tcltk下载tcl832.exe,或更新版本并安装。
    第四步,用CMake生成工程。打开CMake,在Show Advanced Values前打勾。Build For选Visual Studio 7.net。
    其他的内容按照下面的表核对:
    " Where is the source code: C:\VTK\
    " Where to build the binaries: C:\vtkbin\
    " VTK WRAP TCL EXE=C:/vtkbin/bin/$(IntDir)/vtkWrapTcl.exe
    " VTK WRAP HINTS=C:/VTK/Wrapping/hints
    " VTK USE 64BIT IDS=OFF
    " VTK MANGLE MESA=OFF
    " VTK DISPLAY WIN32 WARNINGS=OFF
    " VTK DEBUG LEAKS=OFF
    " TK XLIB PATH=C:/Tcl/include
    " TK WISH=C:/Tcl/bin/wish83.exe
    " TK LIBRARY=C:/Tcl/lib/tk83.lib
    " TK INTERNAL PATH=C:/VTK/Rendering/tkInternals/tk83
    " TK INCLUDE PATH=C:/Tcl/include
    " TCL TCLSH=C:/Tcl/bin/tclsh83.exe
    " TCL LIBRARY=C:/Tcl/lib/tcl83.lib
    " TCL INCLUDE PATH=C:/Tcl/include
    " LIBRARY OUTPUT PATH=C:/vtkbin/bin
    " EXECUTABLE OUTPUT PATH=C:/vtkbin/bin
    " CMAKE USE WIN32 THREADS=ON
    " CMAKE MAKE PROGRAM=devenv.com
    " CMAKE EXTRA LINK FLAGS=/STACK:10000000
    " CMAKE CXX FLAGS RELWITHDEBINFO=/MD /Zi /O2
    " CMAKE CXX FLAGS RELEASE=/MD /O2
    " CMAKE CXX FLAGS MINSIZEREL=/MD /O1
    " CMAKE CXX FLAGS DEBUG=/MDd /Zi /Od /GZ
    " CMAKE CXX COMPILER=cl
    " CMAKETEST COMMAND=NOTFOUND
    " BUILD DOCUMENTATION=OFF
    " BUILD EXAMPLES=ON
    " BUILD SHARED LIBS=ON
    " BUILD TESTING=ON
    " CMAKE CXX FLAGS=/W3 /Zm1000 /GX /GR
    " DART ROOT=NOTFOUND
    " OPENGL LIBRARY=opengl32
    " VTK DATA ROOT=C:/VTKData
    " VTK USE ANSI STDLIB=OFF
    " VTK USE HYBRID=ON
    " VTK USE MATROX IMAGING=OFF
    " VTK USE PARALLEL=ON
    " VTK USE PATENTED=ON
    " VTK USE RENDERING=ON
    " VTK USE VIDEO FOR WINDOWS=OFF
    " VTK USE VOLUMEPRO=OFF
    " VTK WRAP JAVA=OFF
    " VTK WRAP PYTHON=OFF
    " VTK WRAP TCL=ON
    按Configure键,直到所有选项都变成灰色的,按OK键,就会生成一个文件夹C:/VTKbin。
    第五步,打开Visual Studio,编译C:/VTKbin中的VTK.sln。
    第六步,添加TCLLIBPATH=c:/vtk/wrapping/tcl作为环境变量。具体方法如下,打开开始|控制面板|系统|高级|环境变量,然后添加就可以了。
    第七步,打开Visual Studio .net,在工具|选项|项目|VC++目录|包含文件中添加如下目录:
    " C:\VTK\Common\
    " C:\VTK\Filtering\
    " C:\VTK\Graphics\
    " C:\VTK\Hybrid\
    " C:\VTK\Imaging\
    " C:\VTK\IO\
    " C:\VTK\Parallel\
    " C:\VTK\Patented\
    " C:\VTK\Rendering\
    " C:\vtkbin\
    在工具|选项|项目|VC++目录|库文件中添加C:\VTKbin\bin\debug。
    至此,vtk就装好了,也许这不是最简单的方法,但是也算是行之有效。
    在C++环境下使用VTK
    首先,可以先参考一下VTK中自带的例子,在C:\VTK\Examples\GUI\Win32\SimpleCxx这个文件夹中。这个文件夹中每个cpp文件都有一个对应的CMakeLists.txt文件,需要先用CMake编译,然后再用VC执行CMake编译后生成的sln文件。其实,直接用VC编译也是可以的,但是需要自己手动连接许多库文件等等,比较麻烦,所以强烈推荐使用CMake。
    自己编写的cpp文件也可以用CMake编译,对于初期的一些较为简单的程序,可以复制VTK自带的例子里的CMakeLists.txt文件,只需改一下文件中的cpp文件名就可以了。
    Vtk的功能很强大,我也只用过里面有关体绘制的几个类,只知其皮毛而已,所以就写到这里吧。如果有错误或不准确的地方,请大家批评指正。

    VTK资料:

    这个是能用google搜到的唯一的下载地址,单线程,没办法ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/01%20Welcome.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/02%20Installation.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/03%20System%20Overview.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/04%20The%20Basics.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/05%20Visualization%20Techniques.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/06%20Visualizing%20Image%20and%20Volume%20Data.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/07%20Bulding%20Models.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/08%20Data%20Interface%20&%20Miscellaneous.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/09%20Contributing%20Code.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/10%20Managing%20Pipeline%20Execution.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/11%20Interfacing%20to%20VTK%20Data%20Objects.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/12%20How%20to%20Write%20a%20Process%20Object.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/13%20Integrating%20with%20the%20Windowing%20System.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/14%20Coding%20Resources.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/15%20CD-ROM.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/content.pdf
    ftp://Graphics:Graphics@ftp.thuda.org:9021/_incoming/VTK%20User's%20Guide/index.pdf
  • 相关阅读:
    ambry集群搭建(无SSL验证的方式)
    接口属性命名不规范的处理方式
    windows下搭建ElasticSearch
    MyBatis-Plus分页插件——PageHelper和IPage原理介绍
    饥荒服务器搭建加mod使用 阿里云服务器 Ubuntu18
    WSL2+Ubuntu20.04桌面功能配置
    设计模式学习总结(Java版)
    Java in 蓝桥杯
    Windows 批处理脚本学习
    Vue风格指南小结
  • 原文地址:https://www.cnblogs.com/buffer/p/1410235.html
Copyright © 2011-2022 走看看