VTK开发过程中常常遇到的一些问题,比如:no override found for ‘…’ 这种错误,如果没有用CMake编译肯定会出现,并且不好查,这些错误常常让人摸不着头脑。
本文参考了51blog和stackoverflow中相关内容,并做整理完善,希望能有帮助。
1.文字未显示:
现象:在VTK中使用vtkTextActor或vtkActor2D类显示文字,结果文字未显示出来;
解决方法:在程序上方加上 VTK_MODULE_INIT( vtkRenderingFreeType )
2.编译出现错误:no override found for ‘…’
解决方法:在程序上方加上
#include <vtkAutoInit.h>
VTK_MODULE_INIT( vtkRenderingOpenGL );
这里强调下,很多情况下,no override显示的是vtkRender vtkRenderWindow等,但是只需要加上vtkRenderingOpenGL的初始化就可以了,这类问题出现的原因是使用本地编译器编译源码,很多宏没有定义,需要用CMAKE重新生成工程,配置正确并编译。
3.运行出现错误:vtkLookupTable [0000000A494850]:Bad table range:[1e+010,-1e+010]
原因:vtkLookupTable范围设置错误,SetRange( double min, double max )参数min比max小
解决方法:正确设置SetRange(…)函数的参数
4.运行时出现错误:Error: no voerride found for “vtkGPUVolumeRayCastmapper”
解决方法:在main函数前加上
VTK_MODULE_INIT( vtkRenderingVolumeOpenGL );
5.运行时出现错误:vtkTrivialProducer (0000000009584F50): This data object does not contain the requested extent.
原因:使用vtkImageReslice,设置完后未调用Update()方法;
解决方法:pImageReslice->Update();
备注:其他类出现此错误同此解决方法。
6.运行时出现错误:vtkOpenGLTexture (0000000002540430): No scalar values found for texture input!
原因:创建vtkTextActor时,未调用SetInput()方法;或调用SetInput()方法,参数给的空字符串。这都相当于创建了一个空vtkTextActor,导致该错误发生。
解决方法:创建vtkTextActor时进行初始化,即调用SetInput()方法,且必须给出参数,哪怕是一个空格字符创。
7.运行时出现错误:Invalid pixel format, no OpenGL support
解决方法:不要在QVtkWidget的子类构造函数中创建需要render(渲染)的对象,在使用时进行渲染。
8.运行时警告:Warning: Link to vtkInteractionStyle for default style selection.
解决方法:在main函数前加上 VTK_MODULE_INIT( vtkInteractionStyle );
9.运行时,X::New() 返回NULL
解决方法:
#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)