AngelCodeFont正在渲染块而不是字体字形

时间:2015-02-04 20:25:26

标签: java opengl lwjgl

如何使其正确呈现字体?

当它绘制文本时,它看起来像这样:

Image

它应该呈现出某些效果" L:1 |时间:1450"

渲染类的代码如下。

import java.io.InputStream;

import org.lwjgl.opengl.GL11;
import org.newdawn.slick.AngelCodeFont;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;
import org.newdawn.slick.util.ResourceLoader;

public class Graphics {

private static AngelCodeFont font12;

public static void initFont() {
    try {
        font12 = new AngelCodeFont("./src/res/textures/Jump12.fnt", new Image("src/res/textures/Jump12_0.png"));
    } catch (SlickException e) {
        e.printStackTrace();
    }
}


public static void render(double x, double y, double width, double height, int xOffset, int yOffset, SpriteSheet sheet) {       
    sheet.bind();
    if (sheet.getName().equals("spritesheet")) {
        xOffset = xOffset << 4;
        yOffset = yOffset << 4;
    }

    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);

    GL11.glTranslated(xOffset, yOffset, 0);
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2d(x / width, y / height);
    GL11.glVertex2d(0, 0);
    GL11.glTexCoord2d((x + 1) / width, y / height);
    GL11.glVertex2d(width, 0);
    GL11.glTexCoord2d((x + 1) / width, (y + 1) / height);
    GL11.glVertex2d(width, height);
    GL11.glTexCoord2d(x / width, (y + 1) / height);
    GL11.glVertex2d(0, height);
    GL11.glEnd();
    GL11.glLoadIdentity();
}

public static void renderInfo(int dist, int health, int x, int y, int l, int timer) {
    SpriteSheet sheet = loadSpritesheet("jumpbar");
    sheet.bind();
    GL11.glTranslated(0, 0, 0);
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2d(0, 0);
    GL11.glVertex2d(40.5, 5);
    GL11.glTexCoord2d(1, 0);
    GL11.glVertex2d(40.5 + Math.abs(dist - 1), 5);
    GL11.glTexCoord2d(1, 1);
    GL11.glVertex2d(40.5 + Math.abs(dist - 1), 10.5);
    GL11.glTexCoord2d(0, 1);
    GL11.glVertex2d(40.5, 10.5);
    GL11.glEnd();

    sheet = loadSpritesheet("healthbar");
    sheet.bind();
    GL11.glTranslated(0, 0, 0);
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2d(0, 0);
    GL11.glVertex2d(146.5, 5);
    GL11.glTexCoord2d(1, 0);
    GL11.glVertex2d(146.5 + health / 2, 5);
    GL11.glTexCoord2d(1, 1);
    GL11.glVertex2d(146.5 + health / 2, 10);
    GL11.glTexCoord2d(0, 1);
    GL11.glVertex2d(146.5, 10);
    GL11.glEnd();
    GL11.glLoadIdentity();

    font12.drawString(100, 60, "L: " + l + " | Time: " + timer);
    font12.drawString(1, 20, "x: " + x);
    font12.drawString(1, 40, "y: " + y);
}

public static SpriteSheet loadSpritesheet(String sheet) {
    SpriteSheet spritesheet = null;
    InputStream ref = ResourceLoader.getResourceAsStream("res/textures/" + sheet + ".png");
    try {
        spritesheet = new SpriteSheet(sheet, ref, 256, 256);
        spritesheet.setName(sheet);
    } catch (SlickException e) {
        e.printStackTrace();
    }

    return spritesheet;
}
}

是否存在与OpenGL存在的一些冲突,我不知道,还是一切都错了?

1 个答案:

答案 0 :(得分:0)

看起来字形呈现为不透明的四边形。你还记得启用混合吗?

glEnable(GL_BLEND);

如果是项目的惯例,请务必将其关闭。