4

在我的 iPhone 游戏中,我的 PVR 纹理压缩工作非常愉快和良好,但是在将多个纹理平铺在一起时我遇到了问题。基本上,我有一个非常大的背景,它被分成多个 512x512 的图块,所有 PVR 压缩。然后将它们绘制在一起,看起来像一个大背景图像。PVR 的工作方式,因为它不知道它应该压缩纹理,就好像它是一个非常大的纹理 - 即使用邻居的平铺信息来确定如何执行 PVR 压缩。

我可以想到几种方法来做到这一点。

1)不知何故告诉texturetool命令行程序适应其他相邻的图像。
2) 使用命令行程序生成代表整个图像的巨大 PVR 纹理,然后以某种方式将字节拆分为多个图像——这可能是不可能的。
3) 做一些 OpenGL ES 的技巧来很好地融合边缘。
4)做一些技巧,我在每个图块中都有冗余信息,然后在绘制纹理时剪切这些区域(请不要)。

希望我可以做 1、2 或 3,或者还有其他一些众所周知的解决方案。

4

2 回答 2

4

我最终选择了选项 4。我认为这不是 PVRTC 不合适的情况——事实上这几乎是必需品。当我一次在内存中总共有 24 个 512x512 纹理(代表一个非常大的背景和前景)时,将它们置于未压缩状态就是自杀。所以我只是像往常一样使用 PVR 压缩,然后我在我的平铺算法中编辑了几行代码,以便它们在每一端重叠并修剪 15 个像素。瞧,看起来很棒。花了几天时间,很烦人,但我认为这对于需要在 iPhone 上使用非常大的平铺背景的人来说是一个不错的选择。

于 2009-08-18T18:51:22.947 回答
1

我最好的建议,但不是你问的,是知道什么时候 PVRTC 不合适。到目前为止,最简单的解决方案是不对这些图块使用 PVRTC。我花了很多时间试图让 PVRTC 在它不适合的情况下工作。

也就是说,

使用 PVRTC 时,始终假定纹理是平铺的(与其自身),因此右边缘的像素会影响左边缘的像素(与顶部和底部相同)。所以选择 1 或 2 可能不起作用。

一种可能性是向图块添加一个 Alpha 通道,并允许它们在边缘周围淡出,这样当您重叠它们时,它们会相互淡入。请记住,PVRTC 往往在渐进式 alpha 淡化时效果更好。硬 alpha 边缘在 PVRTC 中通常具有伪影。

于 2009-08-12T15:53:58.377 回答