所以我尝试使用自定义字体在屏幕上绘制文本,我已经完成了。当同时使用纹理时会出现问题。
我加载我的纹理:
int Texture {
try {
InputStream in = new FileInputStream(filelocation);
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, Texture);
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("Textures are not in their correct location.");
Display.destroy();
System.exit(1);
} catch (IOException ex) {
System.err
.println("Textures are not in their correct location.");
Display.destroy();
System.exit(1);
}
}
我的字体就像这样
public static void load(float size){
try {
InputStream inputStream = ResourceLoader.getResourceAsStream(filelocation);
Font awtFont = Font.createFont(Font.TRUETYPE_FONT, inputStream);
awtFont = awtFont.deriveFont(size);
fontname = new TrueTypeFont(awtFont, true);
} catch (Exception e) {
e.printStackTrace();
}
}
正在发生的事情是输入流如何“混淆”,我想要的文字是用我加载的纹理绘制的。
我在Font.class的游戏循环之前加载字体,并且从他们使用的类中加载纹理,这在游戏循环中被调用。
我搜索了这个问题但找不到任何东西。 如果你能理解我,请提前谢谢。
答案 0 :(得分:0)
而不是InputStream混合起来,它更可能是纹理绑定。 在您的Texture类中,以下行被注释掉:
// glBindTexture(GL_TEXTURE_2D,纹理);
这会导致纹理图像被加载到之前绑定到GL_TEXTURE2D的任何内容中,替换之前的纹理。
在使用glTexImage2D
将图像加载到纹理之前,需要绑定纹理