JavaFX 围绕枢轴旋转相机

标签 java javafx trigonometry javafx-3d 3dcamera

去年我发布了一个similar question ,但由于它的描述性不强,而且总体上一团糟,我决定完全重写它。

我正在使用 JavaFX 制作一个简单的 3D 编辑器,它的相机移动类似于 Blender 或几乎任何其他编辑器。我添加了绕 x 轴的旋转,然后使用三角函数计算了其他 2 个旋转(y 和 z 轴)。 x 轴和 y 轴旋转都是相对于枢轴点进行的,但 z 轴旋转始终是相对于屏幕/相机进行的,而不是其枢轴点。

为了更好地理解这个问题,我画出了轴的位置以及我想要它们的位置:

这是目前应用角度的方式: Current axis

这就是我希望他们成为的样子: How I'd like them to be

这是我用来计算角度的部分代码(尽管根据我的观察,它似乎与我的问题无关):

//variables angleY and angleX are calculated according to mouse drags on the screen
rotateY.setAngle(angleY);
rotateX.setAngle(angleX*Math.cos(Math.toRadians(angleY)));
rotateZ.setAngle(angleX*Math.sin(Math.toRadians(angleY)));

为了方便测试,我上传了the code在 Pastebin 上。

编辑:我可以通过旋转所有东西来实现同样的效果,但相机(这正是相机移动所做的)并使用 x 轴进行仰角,但我正在寻找更优雅的解决方案。

最佳答案

我决定使用上面提到的解决方案。我为每个元素创建了一个组,但相机然后在 y 轴上旋转了元素。对于高程(x 轴),我旋转相机。事实证明,这是解决我的问题的一个很好的解决方案。

编辑:由于这并不是我上面提出的问题的真正答案,我决定找出真正出了问题的地方。我正在研究这些转换,发现它们的应用顺序与您将它们添加到转换数组的顺序相同。真正的问题是我在 XYZ 顺序中应用了旋转,因此 x 旋转是在 y 旋转之前完成的,所以它不是相对于它的。将转换顺序从 XYZ 更改为 YXZ 可解决所有问题。

关于JavaFX 围绕枢轴旋转相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948092/

相关文章:

java - 我希望这段代码从 android studio 循环

java - WebApp 中的静态 ThreadLocal 变量 - 是否存在任何安全/性能问题?

JavaFX:获取 ComboBoxTableCell 的 ComboBox

c# - 如何解释 Math.Acos() 报告无效输入的情况?

java - 坚持一些角度算术

java - 获取重定向uri的位置

java - 示例 SoftKeyboard 在键入数字时删除字母

java - 在 JavaFX 中让角色跳跃

java - 如何在进度条中显示进度百分比?

java - 如何使用正弦/余弦波返回振荡数