我已經編寫了一個讀取二進制STL文件的Java FX應用程序,將數據加載到JavaFX網格中,然後將其顯示爲3D渲染。大部分代碼來自Oracle JavaFX教程中的分子查看器示例。我創建了一個名爲STLMesh的TriangleMesh的新子類,它在STL構面中掃描並相應地設置點和麪陣列。JavaFX 3D性能 - 初始渲染速度很慢
該代碼適用於小例子:一個包含1000個三角形的STL文件立即出現。然而,一個剛好不到14,000個三角形的文件首先需要50秒才能出現,而我還有其他更大的例子不會在合理的時間內出現。一旦在屏幕上,我可以非常順利地旋轉和平移顯示。我的問題:如何避免初始渲染中的這種長時間延遲?
設置JavaFX場景圖的代碼如下 - 它基本上是moelcule查看器的頂級代碼,但是使用我的STLMesh類的實例而不是分子。
執行stage.show()之後,JavaFX線程內發生延遲。其他JavaFX窗口在延遲期間不響應。通過光盤判斷,在延遲期間沒有顯着的交換活動:它似乎是計算限制的。
我在東芝Tecra筆記本電腦上運行 - 我對這些機器上的圖形硬件瞭解不多。
我試過了從http://www.interactivemesh.org/models/jfx3dimporter.html的Jim modelimporter,我相信這是用JavaFX實現的:它將所有的STL文件呈現在一秒鐘或兩秒鐘內。他們不提供信息來源,所以我不知道他們使用什麼聰明才能避免我遇到的問題。
STLviewer(File file) {
Stage stage = new Stage();
buildScene();
buildCamera();
buildAxes();
PhongMaterial material = new PhongMaterial(Color.YELLOW);
final Group sGroup = new Group();
MeshView meshView = new MeshView(new STLMesh(file));
meshView.setMaterial(material);
// meshView.setCullFace(CullFace.NONE);
meshView.setDrawMode(DrawMode.LINE);
sGroup.getChildren().add(meshView);
world.getChildren().addAll(sGroup);
Scene scene = new Scene(root, 900, 600, true);
scene.setFill(Color.GREY);
handleMouse(scene, world);
scene.setCamera(camera);
stage.setScene(scene);
stage.show();
}
你能否提供一個鏈接到一個模型(和模型加載代碼),這對你來說是一個問題,以便有人可以試圖複製這個問題?請參閱[mcve](http://stackoverflow.com/help/mcve)。 – jewelsea 2014-10-07 22:24:37
我已經將STLviewer從應用程序中剝離出來,將代碼和幾個STL文件壓縮並放在這裏:https://dl.dropboxusercontent.com/u/30126557/simpleSTLViewer.zip。解壓縮內容,如果你願意(我已經把.class文件放在那裏)重新編譯,並以java SimpleSTLviewer **的方式運行。兩個STL文件被渲染:一個小的和一個牛奶流失的模型。在我的機器上,第二個渲染需要幾分鐘的時間。一旦渲染,性能非常好。 – 2014-10-08 07:32:34