2015-02-12 50 views
1

我有一個3D數據文件(時間,x,y,z),我想創建一個帶有播放功能的javafx交互式動畫,暫停按鈕和旋轉3d對象。如何在javafx中創建3D數據的播放器

我沒有在JavaFx中找到任何基礎示例,似乎我必須重新創建自己的mediaplayer。

請問您有什麼建議。 謝謝,

+0

請您詳細說明您要完成的是什麼?什麼樣的數據文件? – jdub1581 2015-02-12 17:41:01

+0

@ jdub1581這是一個csv文件,用逗號分隔符,文件格式如下:時間,x1,y1,z1,x2,y2,z2,...(x1,y1,z1)是座標第一個點和(x2,y2,z2)是第二個座標等...我必須從該文件讀取數據並將結果顯示爲3D動畫,我可以將相機轉動。我需要添加視頻控件(播放/暫停,停止和時間滑塊)以在動畫中導航。 – user1828433 2015-02-12 18:15:05

+0

好吧,我想我現在明白了一點,MediaPlayer讓我失望了。 所以,{x,y,z}值 - 網格中的頂點?或者說是「球體」的位置? 您是否需要內插前進和後退? – jdub1581 2015-02-12 23:47:11

回答

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

相關問題