【问题标题】:Black Artifacts on Android in OpenGL ES 2OpenGL ES 2 中 Android 上的黑色伪影
【发布时间】:2026-01-30 02:05:02
【问题描述】:

我有一个 OpenGL ES 2 代码库,可通过 PowerVR 仿真库在 iOS、Android 和 PC 上运行。

当我在 LG Optimus G LGE971 上运行此代码时,我在我的模型上看到黑色伪影:

http://imageshack.us/photo/my-images/594/renderartifacts.png/

我的第一反应是近剪裁平面可能是问题所在,但由于这些伪影仅出现在选定的设备上,我不认为这是问题所在。关于可能导致此问题的任何其他想法?

此外,上图中没有很好地捕捉到这一点,但工件不是静态的——它们会随着模型旋转等移动。

【问题讨论】:

  • 发布您的着色器代码,似乎它可能是那些设备芯片不支持的东西。
  • 你的模型使用纹理吗?
  • 这也可能是 z-figthing 引起的问题。看起来模型的黑色部分是从灰色(纹理?)中出来的,而它们应该是武器的内部部分。您是否对武器的某些部分使用不同的着色器/GL 模式?还请提供用于绘制几何图形的代码摘录。您是否在其他配备 Adreno 320 GPU 的设备上尝试过?此外,正确渲染的屏幕截图将非常非常有用。

标签: android opengl-es-2.0 lg


【解决方案1】:

我认为着色器代码中的光照计算可能是错误的。

这看起来就像只使用没有漫反射和镜面反射的环境光。

我还希望您检查是否将纹理从 BGRA 转换为 RGBA。

【讨论】:

  • 着色器不使用任何光照信息——它只是在片段着色器中进行纹理查找。
【解决方案2】:

问题已解决。我通过使用解决了这个问题

glTexImage2D()

当我设置我的 mipmap 级别时,缓冲区为 NULL,然后使用

glTexSubImage2D()

在将纹理数据上传到每个关卡时。​​p>

【讨论】: