使用鼠标移动旋转3D视图 - 使用固定摄像头

时间:2013-07-04 07:45:03

标签: java 3d trigonometry java-3d coordinate-transformation

背景
https://marketplace.gephi.org/plugin/force-atlas-3d/

问题
- 我在屏幕上有一个以(x,y,z)坐标表示的节点网络 - 鼠标指针的位置用屏幕上的(x,y)坐标表示(嗯,正常)。

=>我想使用鼠标拖动动作(x和y的变化)来旋转节点网络的视图。

  • 将鼠标向左拖动会导致节点绕垂直轴向左旋转(“旋转”在此处未按操作定义,但我希望您可视化我的意思)。

  • 将鼠标拖动到屏幕底部会导致节点绕水平轴旋转,朝观察者方向旋转。

我认为我需要一种方法,将鼠标坐标的变化作为输入,并返回每个节点坐标的相应变体。

备注
- 这里没有相机移动。
- 该解决方案是用Java开发的 - 也许像Java3D这样的库在这里是相关的?

任何帮助将不胜感激 - 并在我正在构建的Gephi插件中得到承认! THX!

1 个答案:

答案 0 :(得分:3)

尝试使用orbit behavior

OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ROTATE);
orbit.setSchedulingBounds(new BoundingSphere());
universe.getViewingPlatform().setViewPlatformBehavior(orbit);

它会向所有方向旋转视图。但是,您可以通过将Y旋转移动倍数设置为0来限制旋转到左右方向(取决于鼠标的方向),如下所示:

orbit.setRotXFactor(2);//or any other value
orbit.setRotYFactor(0);