【问题标题】:Creating a hidden Canvas with LWJGL使用 LWJGL 创建隐藏的画布
【发布时间】:2013-09-28 16:39:18
【问题描述】:

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

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

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

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

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)。

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

【问题讨论】:

    标签: java opengl awt lwjgl


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这似乎可以工作。我稍后会调查它。对于寻找相应 LWJGL 文档的任何人,都可以找到 here
    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多