Java OpenGL:将所有像素渲染为缓冲图像并绘制到屏幕?

时间:2016-01-13 20:23:00

标签: java opengl render lwjgl bufferedimage

我希望能够将我的所有游戏素材像素渲染到openGL中的BufferedImage,然后将其添加到BufferedImage个被调用图像的列表中。然后在我的游戏循环中,我只是遍历每个BufferedImage并将其绘制到屏幕上。但是,我试过环顾四周,无法找到解释如何做到这一点的任何地方。我不是Java的新手,但对OpenGL来说相对较新,并且过去几周一直在关注教程。 ThinMatrix Java LWJGL game development是我一直关注的教程集。我亲自通过电子邮件发送了这个人,但我几周前没有回复。

目前我必须尝试呈现BufferedImage

private static void renderImage(BufferedImage image){
    int[] pixels = new int[image.getWidth() * image.getHeight()];
    image.getRGB(0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth());

    ByteBuffer buffer = BufferUtils.createByteBuffer(image.getWidth() * image.getHeight() * 3); //4 for RGBA, 3 for RGB

    for(int y = 0; y < image.getHeight(); y++){
        for(int x = 0; x < image.getWidth(); x++){
            int pixel = pixels[y * image.getWidth() + x];
            buffer.put((byte) ((pixel >> 16) & 0xFF));     // Red component
            buffer.put((byte) ((pixel >> 8) & 0xFF));      // Green component
            buffer.put((byte) (pixel & 0xFF));               // Blue component
            buffer.put((byte) ((pixel >> 24) & 0xFF));    // Alpha component. Only for RGBA
        }
    }

    buffer.flip(); //FOR THE LOVE OF GOD DO NOT FORGET THIS

    // You now have a ByteBuffer filled with the color data of each pixel.
    // Now just create a texture ID and bind it. Then you can load it using 
    // whatever OpenGL method you want, for example:
    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, image.getWidth(), image.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer);
}

然后在主循环中:

        for (BufferedImage image : imagesToRender){
            renderImage(image);
        }

我想要实现的是当我致电world.render(camera)时,它会创建一个BufferedImage并将其添加到主类中的图像列表中。 GUI也会这样做,但是在单独的图像上。然后在调用GUI和世界渲​​染方法之后,它循环遍历上面的图像列表并将它们呈现到屏幕上。原因显然是效率。如果我可以在将其绘制到屏幕之前将其渲染为BufferedImage,我可以将其渲染为小BufferedImage然后将其缩放以适应屏幕,从而降低渲染成本。

我的问题是,我不知道如何将所有纹理和对象以及地形填充到可以绘制到屏幕的2D BufferedImage

感谢您的帮助!

编辑1:

源代码链接:https://drive.google.com/file/d/0BxW4fcuviUOccnpwVG5qZG9qR2s/view?usp=sharing

0 个答案:

没有答案