有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaFX围绕枢轴旋转摄影机

去年我发布了一个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轴进行仰角,但我正在寻找一个更优雅的解决方案


共 (1) 个答案

  1. # 1 楼答案

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

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