我有一个 3D 数据文件 ( time,x,y,z
),我想创建一个带有播放、暂停按钮和旋转 3d 对象选项的 JavaFX 交互式动画。
我在 JavaFX 中找不到任何基本示例,看来我必须重新创建自己的媒体播放器。
看看这个库,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存储库上添加功能请求,提供一些特定格式的数据,您需要的形状...
有关更多信息,您还可以查看此帖子。