Как да използвате само части от изображения за 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 ints във формат на байтов буфер, приет от GL. За по-подробен пример за това вижте отговора на този въпрос LWJGL Textures and Strings.

Вместо това обаче в GL обикновено използвате текстурни координати, за да изберете правилното подизображение за това, което изобразявате.

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

person Stefan Haustein    schedule 19.06.2012