iPhone应用程序中的奇怪的OpenGL ES行为

时间:2008-10-10 02:55:15

标签: iphone opengl-es

我正在为iPhone制作一个简单的2D游戏。它基于CrashLanding。所以它基本上是一个背景纹理和一些移动的矩形纹理。

我有这个奇怪的小图形问题:一些小的2d项目(可以假设只是矩形)移动得到它们顶部的这个小闪烁的黑色条(背景纹理几乎完全是白色所以小条是明显的)

我正在使用的纹理很小(~1Kb)pngs。

有没有其他人遇到这个?这是一个常见的openGL问题吗?

BTW在模拟器和实际设备上都会发生这种情况。

2 个答案:

答案 0 :(得分:5)

你的纹理中是否有像黑色小条那样的东西?

当我做错事时,我遇到过类似的问题。这是一个小清单:

  • 您是否已经对纹理进行了mipmap,并检查它具有哪些参数。
  • glTexParameters。 (WRAP_S,WRAP_T,MAG_FILTER,MIN_FILTER ......)
  • 纹理的尺寸。 (如果允许使用非二次幂的纹理,则可能会导致图形故障,具体取决于您如何加载纹理)
  • 您是在矩形顶部绘制闪光条吗?
  • 纹理中是否有导致黑条的东西。
  • 动画帧的对齐。
  • 混合和alpha混合。

如果列表中的某些内容对您来说含糊不清,那么阅读它们是一个很好的练习。

我也做了一个很好的猜测:我相信你没有在任何方向包裹你的纹理,并且动画帧有点不对齐,所以你的应用程序在四边形中有一些错误的纹理坐标/高度图。

我希望我的建议有意义。我只使用通常的opengl经验,而不是OpenGL ES,它的图形管道已被修剪,使其更紧凑,更清洁,更优雅。

答案 1 :(得分:0)

由于这是2D游戏,这些小矩形精灵是否包含在同一纹理表中?另一个可能的罪魁祸首可能是纹理过滤。

如果您试图操纵纹理坐标来绘制纹理的子区域,则可以检查是否以大于1:1的比例绘制精灵。如果启用了线性纹理过滤(而不是最近),如果您尝试将精灵缩放到1:1之外,OpenGL可能会从相邻的精灵中抓取一些像素。

如果是这种情况,您可以尝试在精灵之间的纹理表中放置一个1像素的缓冲区。