使用JOGL在屏幕外绘制图形

4
作为一个更大项目的一部分,我正在尝试使用JOGL实现一个工具,它可以将3D渲染导出为位图格式。我们通过创建GLJPanel并将场景绘制到它上面,然后提取位图来实现这一目标。只要系统上至少有一个可见窗口(不一定是包含我们要绘制的面板的窗口),这一切都很正常。
但是如果我们在没有任何可见窗口的情况下尝试执行此操作,则GLJPanel将无法绘制。查看JOGL源代码,我发现它必须拥有有效的对等体(即必须调用addNotify())才能进行绘制。文档称addNotify()仅在面板成为可见窗口层次结构的一部分时才会被调用。改用GLCanvas并没有太大区别,失败模式也不同。WindowsOnscreenGLDrawable.realized未设置,这意味着lockSurface返回LOCK_SURFACE_NOT_READY,导致makeCurrent()失败。
希望能提供任何有关如何创建Java应用程序以在不使其窗口可见的情况下创建和导出3D场景的帮助。
2个回答

5
我不确定是否应该回答自己的问题,但是我找到了似乎现在有效的解决方案。
关键是GLPbuffer,它是一个离屏的GLAutoDrawable,可以在没有可见组件层次结构的情况下创建。 这篇文章对我有所帮助。在确认其完全功能正常之前,我将暂时不接受此答案。
我还应该说,答案来自这个论坛,而不是我的渺小大脑。

0
你应该更深入地了解方法:glReadPixels(),更多信息请参见这里。基本上它的工作原理是这样的:
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”部分无法工作。不过我似乎已经解决了这个问题。 - DJClayworth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接