为什么我的屏幕外渲染Canvas3D不起作用?

时间:2009-08-28 11:10:20

标签: java 3d bufferedimage java-3d canvas3d

我一直试图使用Java3D 1.5.2使屏幕渲染工作。在我的source code中,我一直试图附加一个扩展的Canvas3D,它会对SimpleUniverse执行屏幕外渲染,但这样做会破坏渲染:

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

完整的源代码有点太大而无法粘贴到StackOverflow上,因此我通过here上的Pastie将其提供。

第63行已被注释掉,并且普通的Canvas3D进行了屏幕渲染。它将呈现一个立方体并在JFrame中显示。但是,如果删除注释,则屏幕外渲染将导致屏幕上的渲染无法渲染。此外,屏幕外渲染将返回“大黑无”BufferedImage

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

1 个答案:

答案 0 :(得分:1)

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

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

值来自Screen3D javadoc的顶部。有问题的一行与上面的代码一起工作,至少对我而言:)

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