JavaFX旋转相机围绕一个枢轴

问题描述 投票:2回答:1

去年我发布了一个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)));

为了使测试更容易,我在Pastebin上传了the code

编辑:我可以通过旋转所有内容来实现同样的效果,但相机(这正是相机运动无论如何)和使用x轴进行提升,但我正在寻找更优雅的解决方案。

java javafx trigonometry javafx-3d 3dcamera
1个回答
0
投票

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

编辑:由于这不是我上面提到的问题的答案,我决定找出真正出错的地方。我正在玩变换,发现它们按照你将它们添加到变换数组的顺序应用。真正的问题是我在XYZ顺序中应用了旋转,因此x旋转在y旋转之前完成,所以它与它无关。更改从XYZ到YXZ的转换顺序修复了所有问题。

© www.soinside.com 2019 - 2024. All rights reserved.