1

我开始编写一个特殊用途的图形程序,我倾向于使用 OpenGL 来生成图形。最终目标是在基本框架中同时容纳 2D 和 3D 图的架构。

将生成的图形导出为图像是一个关键特性,最终我将编写代码来生成图形的 2D 投影的矢量图像。但是,与此同时,我希望能够将图形导出为高分辨率图像——比应用程序窗口大得多的图像。

我正在用 Java 编写这个应用程序并使用 LWJGL OpenGL 包装器。我已经想出了如何截取显示窗口的屏幕截图,但我还没有成功创建更大的图像。我试图制作隐形画布,但我无法让它工作。

文档在这里说 Canvas 的 isDisplayable() 方法必须返回 true,为此我重写了 isDisplayable() 方法以始终返回 true,因此它不应该关心它是否在 Frame 中,但是这个不起作用。相反,它会引发以下错误:

java.lang.RuntimeException: No OpenGL context found in the current thread.
        at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)
        at org.lwjgl.opengl.GL20.glDeleteProgram(GL20.java:311)

问题似乎是它还需要顶级窗口的一些属性,但即使我创建了一个虚拟 Frame 类,我也会遇到与以前相同的错误,直到我在框架上调用 setVisible(true)。

有谁知道如何伪造这些图形属性以认为它有一个可见的顶级窗口?有谁知道更简单的方法?

4

1 回答 1

1

作为替代方案,您可以使用帧缓冲区对象 (FBO) 渲染到纹理中。看看这个渲染到纹理的 例子。

于 2013-09-28T08:39:18.270 回答