使用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不一致,会导致文本被渲染到视口外。
两种修复方案二选一:- 每次窗口/表面尺寸变化时,调用方法更新Font类的projection成员,使用最新的宽高重新计算
glm::ortho - 在renderText调用时传入当前的surface宽高,实时计算投影矩阵
- 每次窗口/表面尺寸变化时,调用方法更新Font类的projection成员,使用最新的宽高重新计算
- 可选排查点
如果以上两步修复后仍不显示,可以临时将文本颜色改为亮红色glm::vec3(1.0, 0.0, 0.0),排除文本颜色和背景/3D场景内容相近导致的视觉上看不见的问题。
内容的提问来源于stack exchange,提问作者0x003
相关产品推荐
相关产品推荐

