我一直在使用JavaFX創建3D模型。我已經關注了this guide,除了當我開始添加自己的數據時,所有內容都很有用。作爲最小的工作例子,考慮從上述指南提供的示例應用程序(注:您可能必須添加下面的類變量,它是從導向丟失:double modifierFactor = 0.1;
),並更換buildMolecule()
函數體:JavaFX 3D適用於> 1百萬盒子對象
Random rand = new Random(System.currentTimeMillis());
int dim = 10;
int dimhalf = dim>>1;
for (int i = 0; i < dim; i++) {
for (int j = 0; j < dim; j++) {
for (int k = 0; k < dim; k++) {
Box b = new Box(10, 10, 10);
b.setTranslateX((i-dimhalf)*10);
b.setTranslateY((j-dimhalf)*10);
b.setTranslateZ((k-dimhalf)*10);
b.setMaterial(new PhongMaterial(new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat(), 1.0)));
root.getChildren().add(b);
}
}
}
運行該應用程序(我使用附加標誌-Xmx6g -Xms6g
)並使用dim的值來查看效果。如果您遇到閃爍(我做過,由於Scene
實例上的depthBuffering = true
),請嘗試設置CAMERA_NEAR_CLIP = 100
。對於更大的dim值,您可能還想將CAMERA_INITIAL_DISTANCE
設置爲-1500
。
這工作正常(我的機器上)在弱光環境< 20.暗淡= 30,初步呈現仍然很快,但標準操作(與LMB旋轉,人民幣放大,並與MMB翻譯)是波濤洶涌。這種情況越來越嚴重,因爲增加暗淡度直到70時,初始渲染需要幾秒鐘,但與場景交互基本上是不可能的。
我面臨的情況是,我需要渲染一百萬到一千萬個Box
個實例(dim> = 100)。這可能嗎?我可以使用哪些技巧來加速性能?
對於那些有興趣的人,基礎模型是一個八叉樹。
我可以用來加速性能的技巧嗎?是。無論如何,刪除所有被其他「盒子」覆蓋的「盒子」。這應該允許你使用dim = 50渲染場景,並且暗淡度= 20(3 *50²<20³)的場景表現 – fabian
@fabian謝謝,但是對於我的應用程序,不幸的是,形狀不是完美的長方體,只計算可見迷你長方體不是一件容易的事。然而,它可能仍然有幫助...另一方面,我仍然無法達到昏暗的100 :( – Warkst