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

OpenGL中使用Texture后其余绘制对象消失、坐标显示异常是什么原因?

OpenGL添加纹理加载代码后原有绘制内容异常问题排查

核心原因

OpenGL是状态机模型,你添加的纹理相关代码修改了全局渲染状态,后续绘制坐标系、线框立方体时状态未复位,导致渲染异常,常见的错误点如下:

  • 纹理启用状态未关闭:纹理生成逻辑中大概率调用了glEnable(GL_TEXTURE_2D),后续绘制纯色/线框对象时没有调用glDisable(GL_TEXTURE_2D)关闭纹理。开启纹理后如果顶点没有对应纹理坐标,会出现采样异常,直接导致绘制内容显示错误甚至完全不可见。
  • 顶点属性配置被修改:如果maketexture0等函数中修改了glVertexPointer、glTexCoordPointer的指向,或者绑定了新的顶点缓冲,后续绘制原有内容时没有重新绑定原来的顶点数据指针,会导致顶点数据源错误,直接出现坐标系错位、立方体消失。
  • 矩阵状态未复位:如果纹理生成、菜单栏逻辑中调用glMatrixMode切换过矩阵模式(比如切换到纹理矩阵、投影矩阵),或者修改了模型视图矩阵后没有复位,会导致后续所有绘制的坐标变换计算错误,原有内容被绘制到视口外。
  • 纹理生成触发GL错误:如果bmpsread读取的new.bmp路径错误、分辨率不符合旧版OpenGL要求的2的幂次规则,会导致纹理生成失败触发GL错误,后续绘制指令被直接丢弃。

快速修复方案

  1. 在你添加的bmpsread()、texturemenu()、maketexture0(ln0, 35)三个函数调用后,立即添加以下代码复位OpenGL状态,验证原有内容是否恢复显示:
// 关闭2D纹理
glDisable(GL_TEXTURE_2D);
// 解绑当前纹理
glBindTexture(GL_TEXTURE_2D, 0);
// 切回模型视图矩阵并复位
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// 此处重新绑定坐标系、线框立方体对应的顶点数据指针
  1. 可以在纹理相关代码后添加glGetError()打印返回值,排查是否有GL报错,定位具体错误点。
  2. 确认new.bmp路径正确、分辨率为2的幂次(如256256、512512),避免纹理生成失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:39:04