2008-10-10 57 views
3

我正在为iPhone制作一个简单的2D游戏。它基于CrashLanding。所以它基本上是一个背景纹理和几个矩形纹理。在iPhone应用程序中出现奇怪的OpenGL ES行为

我有这个奇怪的小图形问题:一些小2d项目(可以假设只是矩形)四处移动得到这个闪烁的黑色小条在他们之上(背景纹理几乎全白,所以小条是显而易见的)。

我使用的纹理很小(〜1Kb)PNG。

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

顺便说一下,这在模拟器和实际设备上都会发生。

+0

您是否在模拟器和实际设备上看到问题? – 2008-10-13 18:02:18

回答

5

你有没有像你的纹理中的小黑条吧?

我遇到了类似的问题,当我做错了什么。这里有一个小的清单:

  • 你有没有mmapmap你的纹理或没有,并检查它有什么参数。
  • glTexParameters。 (WRAP_S,WRAP_T,MAG_FILTER,MIN_FILTER ...)
  • 纹理的尺寸。 (如果允许使用非双电源功能,则可能会导致图形故障,具体取决于您如何加载纹理)
  • 您是否正在矩形顶部绘制闪烁条?
  • 在你的纹理中是否存在导致黑条的东西。
  • 动画帧的对齐。
  • 混合和alpha混合。

如果列表中的某些内容对您而言很模糊,那么阅读这些内容很好。

我也做了一个很好的猜测:我相信你没有在任何方向上包装你的纹理,并且动画帧有点偏移,所以你的应用程序有一些错误的纹理坐标/四边形高度正在绘制。

我希望我的建议合理。我只有平常的opengl的经验,而不是OpenGL ES,图形管道已经被修剪,使它更加紧凑,更干净,更优雅。

0

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

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

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

相关问题