2009-08-28 103 views
0

我一直在努力使屏幕渲染工作,使用Java3D 1.5.2。在我source code我一直在試圖附加擴展Canvas3D,會做離屏渲染SimpleUniverse,但是這樣做會破壞渲染:爲什麼我的屏幕渲染Canvas3D不起作用?

62. // FOR SOME REASON THIS BREAKS RENDERING 
63. universe.getViewer().getView().addCanvas3D(canvas); 

完整的源代碼是有點太大,粘貼StackOverflow,所以我通過Pastie通過here提供。

第63行已被註釋掉,並有普通的Canvas3D在屏幕上呈現。它將渲染一個立方體並將其顯示在JFrame中。但是,如果您刪除了註釋,那麼屏幕外渲染將導致屏幕上的不渲染。此外,屏幕渲染將返回一個「大黑什麼都沒有」BufferedImage

我想知道如何進行屏幕外渲染工作,即將旋轉的多維數據集的場景渲染爲緩衝圖像。我一直在研究Java3D提供的用於離屏渲染的示例代碼,並且它們也是這樣做的(除了它們使用Raster對象來將屏幕外緩衝區渲染回屏幕窗口)。

回答

1

這可能是Screen3D的物理尺寸錯誤。該值應該是以米爲單位的物理屏幕的大小。您可以測試:

screen3D.setPhysicalScreenWidth(0.0254/90.0 * destWidth); 
screen3D.setPhysicalScreenHeight(0.0254/90.0 * destHeight); 

的值是從Screen3D的javadoc的頂部。問題行與上面的代碼一起工作,至少對我來說:)

設置錯誤的物理尺寸也可能會改變渲染圖像的縱橫比。

+0

甜,它的作品!順便問一句,你到底需要做些什麼才能讓程序退出。它仍然在運行,即使渲染完成,就好像一些資源仍在運行一樣,我不能把手指放在它正在做的地方。 (我打電話給universe.cleanup(),但似乎不夠)。那之後我會接受答案。 – Spoike 2009-09-03 07:07:35

+0

我會嘗試.dispose()所有框架。如果這不起作用,然後調用System.exit(0),這會殺死jvm。如果你需要jvm繼續運行,那麼需要更多的研究:) – Melv 2009-09-03 07:41:33

+0

是的,我想通過使用System.exit(0),但我不需要任何更優雅的東西,所以沒關係。謝謝。 – Spoike 2009-09-03 07:42:46

相關問題