VTKActor 在渲染后不可见,但在摄像机>重置视图() 上可见

VTKActor not visible after render but visible on camera->resetview()

本文关键字:视图 gt 摄像机 VTKActor      更新时间:2023-10-16

我正在做一个qt-vtk项目。我们有一个划线功能。其中在两个鼠标点击位置之间创建直线。但一旦演员被创造出来,它就不可见了。在添加actor之后,我调用了render函数。但它没有起作用。但如果我使用camera->resetview(),线条会变得可见,但整个视角会发生变化。我哪里做错了?

谢谢Rwik

这可能与您无关,但我(在ActiViz[托管VTK]中)遇到了完全相同的问题,并与之争论了一周,所以我希望这能帮助到其他人。事实证明,我们想在画布上画的线的位置有问题;它们离相机太远(在Z轴上)而看不见。

对我们来说,我们试图在用户点击的任何地方的查看区域上画一个十字。数据点和演员等等都在那里,但只有当你调用resetCamera()并更改相机的配置时,它们才会在场景中可见。最初,我指责我们必须添加到cirvumvent的自定义交互程序——默认交互程序对MouseUp事件的吞咽(预期行为)。调查显示,这似乎不太可能。

在这之后,我把责任转移到了相机上,怀疑重置调用可能是在调用某种我不知道的更新方法。我调用了resetCamera(),然后将相机值恢复到最初的值。当这项工作成功完成时,十字架会在相机缩小时出现,然后在相机后退时再次消失,就在这一点上,我意识到这与场景有关。

在这一点上,我检查了我们用于在3D中检索鼠标位置的方法,并意识到z值是巨大的,它将点放置得太远,这是VTK将控件上的2D位置转换为场景中的3D位置的方法的副产品,反之亦然。

因此,在所有这些之后,一个非常普通且可以避免的错误源于方法渲染器。DisplayToWorld()和WorldToDisplay()。这可能不是每个人的问题,但我希望我能让某人少花一周时间摆弄VTK。

如果没有看到代码,我认为这有点难以帮助,但您是否尝试过使用

ui->qvtkwidget->update();

,其中ui是从QMainWindow派生的类的实例?