总结一下VTK使用过程中的一些错误:
1、非编译错误
这部分错误并不是因为你错误使用VTK类或者是逻辑问题而导致的错误,而是因为缺失一些初始化的头文件而导致的错误
需要在main函数中先添加初始化头文件:
#include <vtkAutoInit.h>
错误一:VTK Error: no override found for 'vtkVolumeTextureMapper2D'.
Error: no override found for 'vtkRayCastImageDisplayHelper'.
在main函数中添加:
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL)
错误二: Error: no override found for 'vtkImageMapper'.
在main函数中添加:
VTK_MODULE_INIT(vtkRenderingOpenGL)
错误三: Error:Could not locate vtkTextRenderer object.
在main函数中添加:
VTK_MODULE_INIT(vtkRenderingFreeType)
错误四:Error: Link to vtkinteractionstyle
在main函数中添加:
VTK_MODULE_INIT(vtkInteractionStyle)
错误五:VTK6.3.0:Error: no override found for 'vtkContextDevice2D'
在main函数中添加
VTK_MODULE_INIT(vtkRenderingContextOpenGL)
2 错误使用VTK类
1、ERROR: In D:\VTK\VTK-6.3.0\Rendering\OpenGL\vtkOpenGLDisplayListPainter.cxx, line 188
vtkOpenGLDisplayListPainter (000001AC0C582AE0): failed after RenderInternal 1 OpenGL errors detected
0 : (1282) Invalid operation
测试解决:去掉vtkrender->render()函数。原因不明 猜想可能是重复调用render函数
VTK文档描述该函数:
virtual void vtkRenderer::Render |
( |
|
) |
[virtual] |
CALLED BY vtkRenderWindow ONLY. End-user pass your way and call vtkRenderWindow::Render(). Create an image.
所以调用的是vtkrenderwindow的render函数。
2、
问题原因:在切换重建模型时候 Actor没有被移除
Renderer->removeactor 要先移除旧的actor再添加新的actor
3、ERROR:
vtkOpenGLExtensionManager (00000232ABF21E00): Extension GL_VERSION_1_2 could not be loaded.
问题出现位置:使用三维纹理映射来实现体重建,运行时弹出的bug,
原因分析:VTK三维纹理映射类:vtkVolumeTextureMapper3D只其支持两种显卡nvidia和ATI;电脑默认的显卡使用的是集成显卡(已集成显卡的配置自然是不能很好的支持OPENGL)而不是独显。手动切换到独显。详细的切换方法:双显卡切换
未完 待续。。。。。。。。。。。。。