1

我有一个 3D 数据文件 ( time,x,y,z),我想创建一个带有播放、暂停按钮和旋转 3d 对象选项的 JavaFX 交互式动画。

我在 JavaFX 中找不到任何基本示例,看来我必须重新创建自己的媒体播放器。

4

1 回答 1

0

看看这个,F(X)yz 是开源的

JavaFX 3D 库,提供基本 JavaFX 8 3D 包所没有的附加原语、复合对象、控件和数据可视化。

有几个组件可以帮助您。例如,所有TexturedMesh子类都是 3D 形状,允许使用数学表达式创建等高线图(通过使用纹理)。

例如,看看 icosahedron test

private IcosahedronMesh ico;
private DensityFunction<Point3D> dens = p-> (double)p.x*p.y*p.z;

@Override
public void start(Stage primaryStage) throws Exception {
     ...
     ico = new IcosahedronMesh(5,1f);
     ico.setTextureModeVertices3D(1530,dens);

     Group sceneRoot = new Group(ico);
     Scene scene = new Scene(sceneRoot, 800, 600, true, SceneAntialiasing.BALANCED);
     ...
}

这个简短的片段将创建如下内容:

二十面体

现在你可以添加一些动画:

long lastEffect = System.nanoTime();
AtomicInteger count=new AtomicInteger();

AnimationTimer timerEffect = new AnimationTimer() {
    @Override public void handle(long now) {
        if (now > lastEffect + 50_000_000l) {
            double t=count.getAndIncrement()%10;
            dens = p->(double)(p.x+t)*(p.y+t)*(p.z+t);
            ico.setDensity(dens);
            lastEffect = now;
        }
    }
};
timerEffect.start();

你会看到这样的东西

您可以在子场景之上添加通常的媒体播放器控件,并将它们绑定到动画。您还可以添加其他动画来旋转 3D 形状。

因此,您唯一需要添加的是将数据文件传递给形状的方法......您可以在 F(X)yz存储库上添加功能请求,提供一些特定格式的数据,您需要的形状...

有关更多信息,您还可以查看此帖子

于 2015-02-12T09:16:21.877 回答