JavaFX 围绕枢轴旋转相机
JavaFX Rotating Camera Around a Pivot
去年我发布了一个 similar question,但由于它的描述性不强,而且总体上一团糟,我决定完全重写它。
我正在用 JavaFX 制作一个简单的 3D 编辑器,它的相机移动类似于 Blender 或几乎任何其他编辑器。我添加了绕 x 轴的旋转,然后使用三角函数计算了其他 2 个旋转(y 和 z 轴)。 x 轴和 y 轴旋转都是相对于枢轴点进行的,但 z 轴旋转始终是相对于 screen/camera 而不是其枢轴点进行的。
为了更好地理解问题,我画出了轴的位置以及我想要它们的位置:
目前角度是这样应用的:
这就是我希望他们成为的样子:
这是我用来计算角度的部分代码(尽管根据我的观察,它似乎与我的问题无关):
//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-axis 上的元素。对于高程 (x-axis),我旋转相机。结果证明这是解决我的问题的一个很好的方法。
编辑:因为这并不是我上面提出的问题的真正答案,所以我决定找出真正出了问题的地方。我正在研究这些转换,发现它们的应用顺序与您将它们添加到转换数组的顺序相同。真正的问题是我在 XYZ 顺序中应用了旋转,因此 x-rotation 在 y-rotation 之前完成,因此它与它无关。将变换顺序从 XYZ 更改为 YXZ 解决了所有问题。
去年我发布了一个 similar question,但由于它的描述性不强,而且总体上一团糟,我决定完全重写它。
我正在用 JavaFX 制作一个简单的 3D 编辑器,它的相机移动类似于 Blender 或几乎任何其他编辑器。我添加了绕 x 轴的旋转,然后使用三角函数计算了其他 2 个旋转(y 和 z 轴)。 x 轴和 y 轴旋转都是相对于枢轴点进行的,但 z 轴旋转始终是相对于 screen/camera 而不是其枢轴点进行的。
为了更好地理解问题,我画出了轴的位置以及我想要它们的位置:
目前角度是这样应用的:
这就是我希望他们成为的样子:
这是我用来计算角度的部分代码(尽管根据我的观察,它似乎与我的问题无关):
//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-axis 上的元素。对于高程 (x-axis),我旋转相机。结果证明这是解决我的问题的一个很好的方法。
编辑:因为这并不是我上面提出的问题的真正答案,所以我决定找出真正出了问题的地方。我正在研究这些转换,发现它们的应用顺序与您将它们添加到转换数组的顺序相同。真正的问题是我在 XYZ 顺序中应用了旋转,因此 x-rotation 在 y-rotation 之前完成,因此它与它无关。将变换顺序从 XYZ 更改为 YXZ 解决了所有问题。