【问题标题】:Why does my off screen rendering Canvas3D not work?为什么我的离屏渲染 Canvas3D 不起作用?
【发布时间】:2009-08-28 11:10:20
【问题描述】:

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

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

完整的源代码有点太大,无法粘贴到 StackOverflow 上,所以我通过 Pastie 通过 here 提供了它。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 甜,它有效!顺便说一句,我到底需要做什么才能使程序自行退出。即使渲染完成,它仍在运行,就好像某些资源仍在运行一样,我无法确定它在哪里运行。 (我正在调用 Universe.cleanup() 但这似乎还不够)。之后我会接受答案。
    • 我会尝试 .dispose() 所有帧。如果这不起作用,则调用 System.exit(0),这将杀死 jvm。如果您需要 jvm 继续运行,则需要进行更多研究 :)
    • 是的,我想通了使用 System.exit(0),但我不需要比这更优雅的东西,所以没关系。谢谢。
    猜你喜欢
    • 2021-11-06
    • 2017-01-24
    • 2015-12-25
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2011-04-20
    相关资源
    最近更新 更多