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

使用OpenGLES2在3D场景上绘制2D文本时文本不显示如何解决

问题原因及解决方案

你遇到的问题核心是3D场景渲染后修改了OpenGL上下文状态,导致文本渲染时状态不匹配,以下是对应修复步骤:

  • 修复VAO绑定缺失
    3D场景渲染时会修改上下文绑定的顶点数组对象(VAO),你的文本渲染函数中没有重新绑定文本对应的VAO,导致GPU无法正确读取顶点属性配置。
    在Font::renderText函数开头textShader.use()之后,添加对应VAO的绑定代码:
glBindVertexArray(your_text_vao); // 替换为你初始化时创建的文本专属VAO的变量名

你单独渲染文本时没有其他操作修改VAO所以正常,叠加3D场景后VAO被切换就无法正确渲染文本。

  • 同步正交投影尺寸
    你的文本投影矩阵仅在类初始化时计算一次,如果渲染过程中surface尺寸发生变化,或者初始化时的screenWidth/screenHeight和实际渲染用的surface_width/surface_height不一致,会导致文本被渲染到视口外。
    两种修复方案二选一:
    1. 每次窗口/表面尺寸变化时,调用方法更新Font类的projection成员,使用最新的宽高重新计算glm::ortho
    2. 在renderText调用时传入当前的surface宽高,实时计算投影矩阵
  • 可选排查点
    如果以上两步修复后仍不显示,可以临时将文本颜色改为亮红色glm::vec3(1.0, 0.0, 0.0),排除文本颜色和背景/3D场景内容相近导致的视觉上看不见的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:57:00