我一直试图使用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
对象将屏幕外缓冲区渲染回屏幕外窗口)。
答案 0 :(得分:1)
可能是Screen3D的物理尺寸错误。该值应该是以米为单位的物理屏幕的大小。您可以使用以下方式进行测试:
screen3D.setPhysicalScreenWidth(0.0254/90.0 * destWidth);
screen3D.setPhysicalScreenHeight(0.0254/90.0 * destHeight);
值来自Screen3D javadoc的顶部。有问题的一行与上面的代码一起工作,至少对我而言:)
设置错误的物理尺寸也可能会改变渲染图像的纵横比。