java - 使用鼠标移动旋转 3D View - 使用固定相机

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

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

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

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

  • 将鼠标向左拖动会导致节点绕垂直轴向左旋转(据我所知,“旋转”在此处未在操作上定义,但我希望您能直观地理解我的意思)。

  • 将鼠标拖动到屏幕底部会导致节点围绕水平轴沿查看者的方向旋转。

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

注意事项
- 这里没有摄像机移动。
- 解决方案是用 Java 开发的 - 也许像 Java3D 这样的一些库在这里是相关的?

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

最佳答案

尝试使用 orbit behavior

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

它向各个方向旋转 View 。但是,您可以通过将 Y 旋转移动乘数设置为 0 来限制向左和向右方向的旋转(取决于鼠标的方向),如下所示:

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

关于java - 使用鼠标移动旋转 3D View - 使用固定相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17464571/

相关文章:

c - 在 3D 空间中的 2 点之间延伸一条线

javascript - 根据旋转 Angular 计算新的圆偏移?

java - 找出两个轴承之间的角度

python - Python 2 Decimal 的 Sin、cos 等?

java - 无法转换为 [Ljava.lang.Object;

java - Android 加速计 - 动态时间扭曲

java - 如何使用 Apache HttpClient 发送 XML POST 请求?

java - 如何通过 MPandroidChart 在我的蜡烛图上添加突出显示文本?

math - 如何将彩色点从 2D 图像移动到 3D 球体

c++ - 旋转不对称平截头体