我开始编写一个特殊用途的图形程序,并且我倾向于使用 OpenGL 来生成图形。最终目标是通过基本框架构建一个同时容纳 2D 和 3D 图形的架构。
将生成的图形导出为图像是一个关键功能,最终我将编写代码来生成图形的 2D 投影的 vector 图像。然而,与此同时,我希望能够将图形导出为高分辨率图像 - 图像明显大于应用程序窗口。
我正在用 Java 编写此应用程序并使用 LWJGL OpenGL 包装器。我已经弄清楚如何截取显示窗口的屏幕截图,但我还没有成功创建更大的图像。我尝试过制作隐形 Canvas ,但无法实现。
文档显示 here 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) 。
有谁知道如何伪造这些图形属性,使其认为它具有可见的顶级窗口?有谁知道更简单的方法吗?
最佳答案
作为替代方案,您可以使用帧缓冲区对象 (FBO) 渲染到纹理中。 看看这个render to texture示例。
关于java - 使用 LWJGL 创建隐藏 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017453/