2013-08-07 97 views
1

我正在开发一个qt-vtk项目。我们有一个画线功能。在两个鼠标单击位置之间创建直线。但是一旦演员被创建,它就不可见。刚刚添加演员后我正在调用渲染函数。但它没有奏效。但是,如果我相机 - > resetview()线变得可见,但整个透视变化。我在哪里做错了?VTKActor渲染后不可见,但在相机上可见 - > resetview()

感谢 Rwik

回答

0

我认为这是一个有点难以帮助,没有看到代码,但你尝试过使用

ui->qvtkwidget->update(); 

,其中UI是从QMainWindow中得到的类的实例?

+0

我试过更新,同时渲染。但只有重置相机的作品。但重置会改变观点。 – rwik

1

这可能与您无关,但我有这个问题(在ActiViz [托管VTK]),并争执了一个星期,所以我希望这可以帮助那里的人。事实证明,这是我们想要在画布上画线的位置的问题;它们距离摄像机太远(在Z轴上)可见。

对于我们来说,我们试图在用户点击的任何地方绘制一个十字。数据点在那里,演员和其他人也在那里,但只有在您调用resetCamera()并因此更改相机配置时才会在场景中可见。 最初,我责怪我们必须添加到cirvumvent默认交互者吞下MouseUp事件(预期行为)的自定义交互器。调查显示,这似乎不太可能。

之后,我把责任推到相机上,怀疑可能是重置呼叫正在调用某种我不知道的更新方法。我调用了resetCamera(),然后将相机值恢复为最初的值。 成功完成后,会发现相机缩小后会出现十字,然后一放好就消失,此时我意识到这与场景有关。

此时,我检查了我们用于检索3D中鼠标位置的方法,并意识到z值非常大,并且它将点放得太远,因为VTK的方法的副产品将2D位置转换为控制场景中的3D位置,反之亦然。

因此,毕竟,源自方法renderer.DisplayToWorld()和WorldToDisplay()的一个非常平凡和可避免的错误。 这可能不是每个人都有的问题,但我希望我可以在VTK周围摆弄一周。