Как использовать только части изображений для LWJGL

Эй, я хотел бы знать, есть ли способ взять только часть изображения и превратить его в текстуру для 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);
            }
        }

person me me    schedule 19.06.2012    source источник


Ответы (1)


Вы можете декодировать PNG в BufferedImage, а затем использовать getRGB() для извлечения данных для интересующей вас области. Вам может понадобиться дополнительный код для преобразования целых чисел (A)RGB в формат байтового буфера, принятый GL. Более подробный пример этого смотрите в ответе на этот вопрос LWJGL Textures and Strings.

Однако вместо этого в GL вы обычно используете координаты текстуры, чтобы выбрать правильное субизображение для того, что вы визуализируете.

Преимущество этого метода в том, что вы можете использовать один glDrawElements/glDrawArrays вызывает рендеринг полигонов с разными текстурами, улучшая производительность рендеринга.

person Stefan Haustein    schedule 19.06.2012