2009-08-28 63 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

相关问题