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

OpenGL ES C++索引使用异常 调用glDrawElements渲染OBJ平面出错

问题根因与修复方案

1. 索引数组配置错误(核心渲染异常原因)

你的索引数组没有正确三角化OBJ中的四边形平面:
OBJ文件中面的顶点顺序是f 1/1/1 2/2/1 4/3/1 3/4/1,OBJ索引从1开始计数,转成OpenGL使用的0基索引后,四个顶点顺序为0、1、3、2。你当前写的索引会导致两个三角形重叠、无法覆盖完整矩形区域。
将索引数组修改为如下任意一种即可:

// 方案1 按OBJ面顺序三角化
GLushort squareindices[] = {
        0, 1, 3,
        0, 3, 2
};
// 方案2 另一种常规四边形三角化写法
GLushort squareindices[] = {
        0, 1, 2,
        1, 3, 2
};

2. 需修复的性能与内存问题

你当前的渲染逻辑存在严重的资源浪费和内存泄漏:

  • 着色器程序创建、属性/uniform位置查询逻辑全部写在了render函数中,相当于每渲染一帧就重新编译链接着色器,开销极大,这部分逻辑应该挪到类初始化方法中仅执行一次,不要每次渲染都创建、删除着色器程序
  • render函数中new出来的programGenerator、matrixOperation对象没有释放,直接造成内存泄漏,建议改成栈上实例化,或者用完立即调用delete释放
  • 投影矩阵、模型矩阵如果没有参数(窗口大小、模型位置/旋转角度)变更,不需要每帧重复计算,可以在参数变动时单独更新

3. 扩展提示

如果你后续需要用到OBJ中带的纹理坐标、法向量数据,需要额外增加对应顶点属性的加载、指针配置逻辑,当前仅渲染纯色平面不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:06:02