2009-01-21 142 views
4

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

但是,如果我们试图做到这一点,而不使任何窗口可见GLJPanel不会绘制。通过JOGL源代码我发现它不会绘制,除非它有一个有效的对等体 - 本质上,除非已经调用了addNotify()。文档说addNotify()仅在面板成为可见窗口层次的一部分时被调用。更改为GLCanvas并没有太大的区别 - 故障模式不同。 WindowsOnscreenGLDrawable.realized未设置,这意味着lockSurface返回LOCK_SURFACE_NOT_READY,导致makeCurrent()失败。

如何创建一个可以创建和导出3D场景而无需使窗口可见的Java应用程序将受到任何帮助。

回答

5

不知道我是否应该回答我的问题,但这里我发现,似乎现在的工作去。

关键是GLPbuffer,这是一个屏幕外GLAutoDrawable,可以创建没有可见的组件层次。

This article有助于它的工作。我将不再接受这个答案,直到我确认它完全正常工作。

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

0

你应该看看方法: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); 
+0

感谢您的帮助,但它是代码的“DrawGLScene”部分不起作用。不过,我似乎已经解决了这个问题。 – DJClayworth 2009-01-21 18:44:07