JavaFX 3D将旋转设置为“旋转”;绝对位置“;

JavaFX 3D将旋转设置为“旋转”;绝对位置“;,javafx,rotation,Javafx,Rotation,我正在玩,试图制作一个小JavaFX应用程序来可视化通过串行端口从基于arduino的板和一些传感器接收的数据 在添加了一些实时更新的线形图之后,我正在尝试通过旋转一个简单的长方体元素来显示从微控制器接收到的横摇、俯仰和偏航值 我有一个线程每x ms调用一个函数,它将传入的数据存储到带有changeListener的ObservableList中,并调用基于控制器的函数来更新/旋转长方体的方向 由于角度的计算是在微控制器上完成的,我想把盒子旋转到接收到的绝对方向 根据我目前的理解,我不能简单地从

我正在玩,试图制作一个小JavaFX应用程序来可视化通过串行端口从基于arduino的板和一些传感器接收的数据

在添加了一些实时更新的线形图之后,我正在尝试通过旋转一个简单的长方体元素来显示从微控制器接收到的横摇、俯仰和偏航值

我有一个线程每x ms调用一个函数,它将传入的数据存储到带有
changeListener
ObservableList
中,并调用基于控制器的函数来更新/旋转长方体的方向

由于角度的计算是在微控制器上完成的,我想把盒子旋转到接收到的绝对方向

根据我目前的理解,我不能简单地从任何先前的方向旋转到一个新的绝对方向,而只能改变相对于先前方向的方向

我想出了以下想法,只需从观测列表倒数第二个值中减去最后一个横摇/俯仰/偏航值

Data dataTmp = observableList.get(observableList.size()-2);
Data dataTmp2 = observableList.get(observableList.size()-1);

newRoll = dataTmp2.getRoll() - dataTmp.getRoll();
newPitch = dataTmp2.getPitch() - dataTmp.getPitch();
newYaw = dataTmp2.getYaw() - dataTmp.getYaw();

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        controller.setToPosition(newRoll, newPitch, newYaw);
    }
});

//...
这只在一定程度上有效。我仍然想旋转到从微控制器接收到的绝对位置

所以我的问题是:有没有办法将长方体的方向重置为例如0,0,0,从这里我可以旋转到新的绝对方向?简单地移除盒子并添加一个新的盒子根本不起作用

group.getChildren().remove(box);
box = new Box(300,50,300);
group.getChildren().add(box);
提前感谢您提出的任何想法甚至解决方案。如果您需要更多信息或代码片段,请告诉我。

关于这一点,鼠标移动时,
onMouseMoved
处理程序会围绕x轴和y轴旋转红色的
框。按下Z键时,以下
onKeyPressed
处理程序将红色
恢复到其原始位置。每个处理程序都使用类的
setAngle()
方法

类似地,您的
setToPosition()
实现可以调用
setAngle()
来建立新的横摇、俯仰和偏航值

之前:

之后:

更微妙的是,验证您是否同步了对数据采集线程和之间共享的任何数据的访问。这说明了一个
任务
,而您的应用程序可能会执行一个
任务
,其中
点3D
保存了横摇、俯仰和偏航值。

本书中有一个关于这方面的示例。你可以得到源代码。无论如何,您还没有公布如何设置长方体旋转(
controller::setToPosition
),因此很难在这方面为您提供帮助。在看到的示例中,有几个显示了三个正交轴,它们作为一个组进行变换。
scene.setOnKeyPressed(e -> {
    if (e.getCode() == KeyCode.Z) {
        content.rx.setAngle(0);
        content.ry.setAngle(0);
        content.rz.setAngle(0);
    }
});