Java 为什么我的屏幕外渲染Canvas3D无法工作?

Java 为什么我的屏幕外渲染Canvas3D无法工作?,java,3d,bufferedimage,java-3d,canvas3d,Java,3d,Bufferedimage,Java 3d,Canvas3d,我一直在尝试使用。在我的示例中,我一直在尝试将一个扩展的Canvas3D附加到SimpleUniverse,该扩展将进行屏幕外渲染,但这样做会破坏渲染: 62. // FOR SOME REASON THIS BREAKS RENDERING 63. universe.getViewer().getView().addCanvas3D(canvas); 完整的源代码有点太大,无法粘贴到StackOverflow上,所以我通过Pastie over提供了它 第63行已被注释掉,具有普通的Ca

我一直在尝试使用。在我的示例中,我一直在尝试将一个扩展的
Canvas3D
附加到
SimpleUniverse
,该扩展将进行屏幕外渲染,但这样做会破坏渲染:

62.  // FOR SOME REASON THIS BREAKS RENDERING
63.  universe.getViewer().getView().addCanvas3D(canvas);
完整的源代码有点太大,无法粘贴到StackOverflow上,所以我通过Pastie over提供了它

第63行已被注释掉,具有普通的Canvas3D屏幕渲染。它将渲染一个立方体并在
JFrame
中显示它。但是,如果删除注释,屏幕外渲染将导致屏幕上的注释无法渲染。此外,屏幕外渲染将返回一个“大黑无”的缓冲图像
buffereImage


我想知道如何进行屏幕外渲染,即将旋转立方体的场景渲染为缓冲图像。我一直在看Java3D提供的屏幕外渲染示例代码,他们也这样做(除了使用
光栅
对象将屏幕外缓冲区渲染回屏幕上的窗口之外)。

可能是Screen3D的物理尺寸错误。该值应为物理屏幕的大小(以米为单位)。您可以使用以下工具进行测试:

screen3D.setPhysicalScreenWidth(0.0254/90.0 * destWidth);
screen3D.setPhysicalScreenHeight(0.0254/90.0 * destHeight);
这些值来自Screen3D javadoc的顶部。有问题的行与上述代码一起工作,至少对我来说:)


设置错误的物理尺寸也可能会更改渲染图像的纵横比。

Sweet,它可以工作!顺便说一句,你知道我需要做什么,以使程序退出本身。即使渲染完成,它仍在运行,就好像某些资源仍在运行一样,我无法确定它在哪里运行。(我打电话给universe.cleanup(),但这似乎还不够)。之后我会接受答案。我会尝试。处理()所有帧。如果这不起作用,那么调用System.exit(0),这将杀死jvm。如果您需要jvm继续运行,那么需要进行更多的研究:)是的,我知道如何使用System.exit(0),但我不需要任何比这更优雅的东西,所以没关系。谢谢