协调javafx中的转换

时间:2014-07-27 20:55:28

标签: javafx system coordinate

我希望在JavaFX中有一个右手笛卡尔坐标系,所以(0,0)在窗口的左下角,x向右增加,y向上增加。我无法弄清楚如何使用变换来做到这一点。如果我应用旋转变换,按钮将颠倒。我想要的只是能够使用这个坐标系而不是默认坐标系。

2 个答案:

答案 0 :(得分:1)

JavaFX documentation中所述(参见 Y-down与Y-up 一章),许多2D图形库都使用了Y down,这是JavaFX已经开始的地方。

要强制Y并正确绘制,您可以将所有内容放在旋转的父节点中:

// Rotate camera to use Y up.
camera.setRotationAxis(Rotate.Z_AXIS);
camera.setRotate(180.0);

// Rotate scene content for correct drawing.
Group yUp = new Group();
yUp.setRotationAxis(Rotate.Z_AXIS);
yUp.setRotate(180.0);

Scene scene = new Scene(yUp);
scene.setCamera(camera);

现在将所有内容添加到yUp以使用这些节点,例如在Y up环境中。

请记住,在2D空间中这很好。如果您想出其他3D功能,请确保您的模型在负Y方向上增长。否则你将不得不使用另一个容器。

答案 1 :(得分:0)

JavaFX的棱镜渲染器最终使用3D相机变换来渲染它的形状。

有两个可以设置到场景的相机,平行和透视。

如果您查看并行相机here的javafx源代码,您会发现一些计算变换的数学运算。 如果重写该方法并实现正确的数学运算,则应该能够反转坐标系。

您将使用的数学类型类似于this

你必须查看来源,看看ortho究竟做了什么。但这应该让你走上正轨。