我有一个3D数据文件(time,x,y,z
),我想创建一个带有播放,暂停按钮和旋转3d对象选项的JavaFX交互式动画。
我在JavaFX中找不到任何基本示例,似乎我必须重新创建自己的媒体播放器。
答案 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);
...
}
这个简短的代码片段将创建如下内容:
现在你可以添加一些动画:
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。