如何创建3d数据播放器?

时间:2015-02-12 01:06:27

标签: javafx 3d javafx-3d

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

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

1 个答案:

答案 0 :(得分:0)

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

  

JavaFX 3D库,提供基础JavaFX 8 3D软件包所没有的其他基元,复合对象,控件和数据可视化。

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

举个例子,看看二十面体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);
     ...
}

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

Icosahedron

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

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();

你会看到类似this的东西。

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

所以你唯一需要添加的是将数据文件传递给形状的方法......你可以在F(X)yz repository上添加一个特征请求,提供一些特定的格式数据,你需要的形状......

有关详细信息,您还可以查看此post