0

嘿,我想知道是否有办法只获取图像的一部分并将其转换为 LWJGL 的纹理。这是我加载图像并用作纹理的基本代码。PNG 解码器来自 twl 库。在此先感谢您的帮助。

int floorTexture = glGenTextures();
        {
            InputStream in = null;
            try {
                in = new FileInputStream("res/floor.png");
                PNGdecoder decoder = new PNGdecoder(in);
                ByteBuffer buffer = BufferUtils.createByteBuffer(4 * decoder.getWidth() * decoder.getHeight());
                decoder.decode(buffer, decoder.getWidth() * 4, Format.RGBA);
                buffer.flip();
                in.close();
                glBindTexture(GL_TEXTURE_2D, floorTexture);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, decoder.getWidth(), decoder.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
                glBindTexture(GL_TEXTURE_2D, 0);
            } catch (FileNotFoundException ex) {
                System.err.println("Failed to find the texture files.");
                Display.destroy();
                System.exit(1);
            } catch (IOException ex) {
                System.err.println("Failed to load the texture files.");
                Display.destroy();
                System.exit(1);
            }
        }
4

1 回答 1

1

您可以将 PNG 解码为 BufferedImage,然后使用 getRGB() 提取您感兴趣的区域的数据。您可能需要一些额外的代码来将 (A)RGB 整数转换为 GL 接受的字节缓冲区格式。有关执行此操作的更详细示例,请查看此问题的答案LWJGL Textures and Strings

然而,与此不同的是,在 GL 中,您通常使用纹理坐标来为您正在渲染的内容选择正确的子图像。

这种方法的优点是可以使用单个glDrawElements/glDrawArrays调用来渲染具有不同纹理的多边形,提高渲染性能。

于 2012-06-19T19:07:03.387 回答