VTK:3D可视化库

一个有用的第三方Example网站

https://kitware.github.io/vtk-examples/site/

这个网站上有非常多的示例代码,非常推荐,学习vtk一定要过一遍。

无用的Example

VTK的Example没什么用处,甚至存在误导,不要参考。

VTK源码下存在Example目录,但是即使给cmake加上“-DVTK_BUILD_EXAMPLES=ON”参数,仍然没有编译出example。 一探究竟,发现库的作者已经不怎么维护Example了: (1)Example使用add_test方式编译,但不知道最后的可执行文件在哪。 (2)Example的CMakeLists.txt存在大量注释掉的Example (3)Example的相关cmake配置存在不用的接口,主要是8.x版本的接口,已经和9.x版本不适配。例如:只有调用但是没有定义的vtk_module_config(当时还找了半天定义)。

Trouble Shooting

Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY

sudo apt-get install libgl1-mesa-dev

X11_Xt_LIB could not be found.

完整的问题:

CMake Error at Rendering/OpenGL/CMakeLists.txt:304 (message):
X11_Xt_LIB could not be found. Required for VTK X lib.

解决方法:

sudo apt install libxt-dev

vtk_no_member_TupleValue

完整问题: 

error: ‘class vtkUnsignedCharArray’ has no member named ‘InsertNextTupleValue’; did you mean ‘InsertNextTypedTuple’?

TupleValue在>7.2版本后改名为TypedTuple,https://kitware.github.io/vtk-examples/site/Cxx上面的example,明明是8.2能编过,但是还是用了这个接口,是因为它的代码中做了宏定义,转到了最新的命名。

vtk_incomplete_type

完整问题:

error: invalid use of incomplete type ‘class vtkPointData’

原因是没有加入include<vtkPointData.h>,实际上vtkPointData只有class声明,没有具体的定义,拿指针没问题,但是对指针进行解引用,就会出错。