You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旧版LWJGL使用Slick Util绘制文本无显示问题求助

旧版LWJGL文本无法显示的排查与修复

以下是针对你遇到的TrueTypeFont文本不显示问题的具体排查方向和修复方案:

1. 配置正交投影矩阵

旧版LWJGL默认使用透视投影矩阵,2D文本很可能落在视锥体范围外导致不可见。绘制文本前必须切换到正交投影:

// 保存当前矩阵状态,避免影响其他渲染逻辑
GL11.glPushMatrix();

// 切换到投影矩阵并设置正交范围
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
// 参数对应:左边界、右边界、下边界、上边界、近裁剪面、远裁剪面
// 这里假设canvas是你的渲染窗口,坐标原点设为左上角
GL11.glOrtho(0, canvas.getWidth(), canvas.getHeight(), 0, -1, 1);

// 切换回模型视图矩阵
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();

// 绘制文本逻辑
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
font.drawString(x, y, text);
GL11.glDisable(GL11.GL_BLEND);

// 恢复之前的矩阵状态
GL11.glPopMatrix();

2. 显式设置文本颜色

TrueTypeFont默认文本颜色为黑色,如果你的渲染背景也是黑色,文本会完全被遮挡。绘制时指定亮色:

// 使用带颜色参数的drawString重载
font.drawString(x, y, text, new Color(255, 255, 255)); // 白色文本
// 或者全局设置字体颜色
font.setColor(Color.WHITE);
font.drawString(x, y, text);

3. 确保字体加载成功

部分系统可能没有"Arial"字体,导致TrueTypeFont初始化失败但无报错。换用系统通用字体:

// 使用系统内置的无衬线字体,兼容性更强
Font awtFont = new Font(Font.SANS_SERIF, Font.BOLD, 24);
font = new TrueTypeFont(awtFont, false);

4. 修正坐标系统匹配

旧版LWJGL的正交投影默认原点在左下角,如果你传入的x,y是窗口左上角坐标,文本会被绘制到屏幕外。转换坐标:

// 将左上角坐标转换为左下角坐标
int adjustedY = canvas.getHeight() - y - font.getHeight(text);
font.drawString(x, adjustedY, text);

5. 排除其他OpenGL状态干扰

  • 禁用深度测试:如果当前启用了GL_DEPTH_TEST,2D文本可能被深度缓冲中的其他元素遮挡,绘制前禁用:
    GL11.glDisable(GL11.GL_DEPTH_TEST);
    // 绘制文本
    GL11.glEnable(GL11.GL_DEPTH_TEST); // 后续需要3D渲染时再开启
    
  • 检查纹理绑定:确保绘制文本前没有绑定其他纹理,TrueTypeFont需要使用自身生成的纹理,可在绘制前调用GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0)重置纹理绑定。

内容的提问来源于stack exchange,提问作者CoderGodToRun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:53:16