转自个人博客:VTK使用Render()渲染窗口的相关问题
1. VTK更新数据但窗口不更新
问题:在对窗口内的数据进行更新后,VTK窗口不会立即更新,需要鼠标等交互后才会更新。
解决办法:对数据更新后,对VTK窗口也要使用Render()
渲染更新。
2. vtkRenderWindow渲染窗口报错
问题:在对vtkRenderWindow对象使用Render()
渲染更新时会出现程序假死、或报内存溢出等错误,如 attempt to add attribute without a handleless buffer for attribute vertexMC
等。
解决办法:暂时没有找到根本原因和正确的解决办法,疑似在多处进行更新时会让窗口对象处理奔溃,那么在渲染更新前使用Finalize()
终止后再渲染更新可以避免报错崩溃,但可能影响显示效果。
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();/// ... /// 其他操作renderWindow->Finalize();
Finalize->Render();
3. vtkGenericOpenGLRenderWindow渲染窗口崩溃
问题:在对vtkGenericOpenGLRenderWindow对象使用Render()渲染更新时,会导致程序奔溃;或使用其他对象使用Render()渲染更新时奔溃;有些情况也可能有出现错误提示Cannot make QOpenGLContext current in a different thread
。
解决办法:这些时候需要保证对象的创建使用与之后的Render()在同一线程下使用,不能跨线程。