【问题标题】:Draw offscreen with JOGL使用 JOGL 在屏幕外绘制
【发布时间】:2009-01-21 16:35:13
【问题描述】:

作为一个更大项目的一部分,我正在尝试使用 JOGL 实现一个设施,它将 3D 渲染导出为位图格式。为此,我们创建一个 GLJPanel 并绘制我们想要的场景,然后提取位图。只要系统在屏幕上至少有一个可见窗口,这一切都可以正常工作 - 不一定是包含我们正在绘制的面板的窗口。

但如果我们尝试在不使任何窗口可见的情况下执行此操作,则 GLJPanel 将不会绘制。逐步浏览 JOGL 源代码,我发现它不会绘制,除非它有一个有效的对等点 - 基本上除非 addNotify() 已经调用它。文档说 addNotify() 仅在面板成为可见窗口层次结构的一部分时才被调用。更改为 GLCanvas 并没有太大区别 - 故障模式不同。未设置 WindowsOnscreenGLDrawable.realized,这意味着 lockSurface 返回LOCK_SURFACE_NOT_READY,导致 makeCurrent() 失败。

欢迎任何关于如何创建可以创建和导出 3D 场景而无需使其窗口可见的 Java 应用程序的帮助。

【问题讨论】:

    标签: java graphics jogl


    【解决方案1】:

    不确定我是否应该回答我自己的问题,但我发现现在似乎可行。

    关键是GLPbuffer,它是一个离屏GLAutoDrawable,可以在没有可见组件层次结构的情况下创建。

    This article 有助于使其正常工作。在我确认它完全正常运行之前,我将不再接受这个答案。

    我也应该说答案来自this forum,而不是我自己微薄的大脑。

    【讨论】:

      【解决方案2】:

      您应该研究方法:glReadPixels() 更多信息here。基本上它或多或少是这样工作的:

      Init(); //doing some initializations in your JOGL app
      
      glDrawBuffer(GL_BACK);
      
      DrawGLScene(); //doing drawing here
      
      glReadBuffer(GL_BACK);
      
      //Copy the image to the array imageData
      glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_BYTE, imageData); 
      

      【讨论】:

      • 感谢您的帮助,但代码的“DrawGLScene”部分不起作用。但是我似乎已经解决了这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      相关资源
      最近更新 更多