1

我正在做一个 qt-vtk 项目。我们有一个画线功能。在两个鼠标单击位置之间创建直线。但是一旦创建了actor,它就不可见了。添加演员后,我正在调用渲染函数。但它没有用。但是如果我这样做 camera->resetview() 线条变得可见,但整个视角会发生变化。我在哪里做错了?

谢谢 Rwik

4

2 回答 2

1

这可能与您无关,但我遇到了完全相同的问题(在 ActiViz [托管 VTK] 中)并为此争论了一周,所以我希望这对那里的人有所帮助。结果是我们想在画布上绘制的线条的位置有问题;它们离相机太远(在 Z 轴上)而无法看到。

对我们来说,我们试图在用户点击的查看区域上画一个十字。数据点在那里,演员和其他东西也在那里,但它们只有在你调用 resetCamera() 并因此改变了相机的配置时才会在场景中可见。最初,我责怪我们必须添加自定义交互器以规避默认交互器对 MouseUp 事件的吞噬(预期行为)。调查显示,这似乎不太可能。

在此之后,我怀疑重置调用可能正在调用某种我不知道的更新方法,因此我将责任转移到了相机上。我调用了 resetCamera(),然后将相机值恢复为最初的值。当这个成功完成后,它最终会在相机拉远时出现十字,然后在向后退时再次消失,此时我意识到这与场景有关。

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

所以毕竟,一个非常普通且可以避免的错误源于方法 renderer.DisplayToWorld() 和 WorldToDisplay()。这可能不是每个人的问题,但我希望我已经节省了某人一周摆弄 VTK 的时间。

于 2014-04-01T08:33:22.370 回答
0

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

ui->qvtkwidget->update();

,哪里 ui 是从 QMainWindow 派生的类的实例?

于 2013-08-07T08:30:14.513 回答