Почему мой BufferedImage не конвертируется в изображение LWJGL должным образом?

1

поэтому я пытаюсь добавить TrueTypeFonts в свою игру. И в основном, у меня есть, чтобы прочитать TrueTypeFont из файла, и он правильно читает его в BufferedImage. Но когда я передаю BufferedImage в свой конструктор Sprite (для загрузки изображений, которые будут использоваться с OpenGL), он полностью разрывает его. Посмотрите на следующие изображения:

Итак, вот конструктор для моего класса утилиты Sprite, который возьмет BufferedImage и преобразует его в ByteBuffer и привяжет его к ID.

public Sprite(BufferedImage img) {
    // this will show the BufferedIamge in a modal dialog, see Fig. 2
    JOptionPane.showMessageDialog(null, null, "Another", JOptionPane.YES_NO_OPTION, new ImageIcon(img.getScaledInstance(img.getWidth() * 4, img.getHeight() * 4, Image.SCALE_REPLICATE)));

    int[] pixels = new int[img.getWidth() * img.getHeight()];
    img.getRGB(0, 0, img.getWidth(), img.getHeight(), pixels, 0, img.getWidth());

    this.width = img.getWidth();
    this.height = img.getHeight();

    ByteBuffer buff = BufferUtils.createByteBuffer(img.getWidth() * img.getHeight() * 4);
    for (int x = 0; x < img.getWidth(); x++) {
        for (int y = 0; y < img.getHeight(); y++) {
            int pixel = pixels[y * img.getWidth() + x];
            buff.put((byte) ((pixel >> 16) & 0xFF));
            buff.put((byte) ((pixel >> 8) & 0xFF));
            buff.put((byte) (pixel & 0xFF));
            buff.put((byte) ((pixel >> 24) & 0xFF));
        }
    }
    buff.flip();

    id = GL.glGenTextures();
    GL.glEnable(GL_TEXTURE_2D);
    GL.glBindTexture(GL_TEXTURE_2D, id);
    GL.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
    GL.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1);
    GL.glTexImage2D(GL_TEXTURE_2D, 0, GL.GL_RGBA, width, height, 0, GL_RGBA, GL.GL_UNSIGNED_BYTE, buff);
}

Рисунок 2 - Изображение, которое мы проходим, выглядит хорошо! Изображение 174551 Рисунок 3 - Когда я делаю изображение, заметьте, что я могу отобразить любое другое изображение, и все получится нормально. Даже прозрачные тоже. Изображение 174551 Игнорируйте blob внизу, чтобы я попытался отобразить строку текста! Любая помощь очень ценится, я потратил некоторое время, пытаясь понять, как реализовать шрифты.

Теги:
opengl
true-type-fonts

1 ответ

2
Лучший ответ

Без фактического запуска тестового проекта я бы заподозрил, что причина в том, что он выглядит так: следующий код:

for (int x = 0; x < img.getWidth(); x++) {
    for (int y = 0; y < img.getHeight(); y++) {

заставляет пиксели добавлять, сканируя сначала, а не наоборот. Чтобы перейти, переверните циклы for:

for (int y = 0; y < img.getHeight(); y++) {
    for (int x = 0; x < img.getWidth(); x++) {
  • 0
    Потрясающие! Большое спасибо <3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню