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

Posted

技术标签:

【中文标题】iPhone 应用程序中奇怪的 OpenGL ES 行为【英文标题】:Strange OpenGL ES behavior in iPhone app 【发布时间】:2008-10-10 02:55:15 【问题描述】:

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

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

我使用的纹理很小 (~1Kb) png。

还有其他人遇到过这种情况吗?这是一个常见的 openGL 问题吗?

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

【问题讨论】:

您是否在模拟器和实际设备上都看到了问题? 这在模拟器和实际设备上都会发生。 【参考方案1】:

你的纹理中有那个小黑条吗?

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

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

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

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于iPhone 应用程序中奇怪的 OpenGL ES 行为的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 4 中 IOS 7 中奇怪的 UIScrollview 行为

iphone中奇怪的UISearchBar取消按钮行为(在模拟器中工作正常)

翻译过程中奇怪的 MVP 行为

ASP.Net 应用程序中奇怪的 GAC 错误

Chrome 中奇怪的 CSS 边框问题

Android应用程序中奇怪的图形伪影