欢迎光临散文网 会员登陆 & 注册

植物大战僵尸北美版使用RGBA32图像教程

2023-04-29 19:33 作者:萌新迎风听雨  | 我要投稿

前面都是废话,重点在专栏最后 众所周知,植物大战僵尸安卓北美版非常非常非常糊,色带明显,玩的时候就好像我们在玩上个世纪的游戏一样。这是因为植物大战僵尸北美版用到的图片都是rgba4444/rgb565/rgba5551格式的,而一般的显示器能显示rgb888颜色。那么,有没有什么办法能在植物大战僵尸北美版中实现rgba8888纹理呢? PopStudio编码ptx图像时可以选择格式为0的ARGB8888格式(BGRA8888),但是一旦使用此格式打包数据包,在很多安卓设备上面就会出现黑屏的情况,但是在iOS设备却不会有这种情况,植物大战僵尸iPad版本身也就含有这种格式的图像。这是为什么呢? 我使用ida对游戏进行了反汇编,看到有两处逻辑和纹理格式有关,一个是将group附加给ResStreamsPool的时候创建空纹理,另一个是将ptx纹理“上色”到空纹理。这两处逻辑大量使用OpenGL ES 2.0中的函数,不过在植物大战僵尸安卓版中这些都是虚函数,没有直接调用。这里可以看到调用glTexImage2D和glTexSubImage2D之前,有一步将ptx纹理格式转为GPU纹理格式的操作,ptx0(BGRA8888)被解释为GL_BGRA_EXT/GL_BGRA_IMG和GL_Byte,是ext或者img扩展,所以必须由硬件支持才可以正常使用这种纹理。也就是说,黑屏的设备缺少这种硬件支持。 但是如果你了解pvz2,你会发现在pvz2安卓版中也有ptx0这种格式,对应的纹理是popstudio中的ABGR8888(其实是RGBA8888),游戏中可以正常加载。对其进行反汇编,发现ptx0被解释为GL_RGBA和GL_Byte。 为什么pvz2安卓版不用BGRA8888而是用RGBA8888呢?这是因为,RGBA8888纹理不需要额外的硬件支持,所有支持OpenGL ES 2.0的设备都支持。 所以我有一个思路,就是把植物大战僵尸北美版加载纹理逻辑中的GL_BGRA_EXT换为GL_RGBA,让植物大战僵尸北美版可以像pvz2一样将ptx0解释为RGBA8888纹理。然后在popstudio中,生成ptx的时候,勾选设置中的ABGR8888选项。 对libpvz.so进行如下两处修改即可,然后使用popstudio打包rsb的时候勾选设置中的ARGB8888。 地址:0x3B392C 大小:8字节 原始数据:81 3C A0 E3 1F 30 43 E2 修改数据:19 3C A0 E3 08 30 83 E2 地址:0x3B42DC 大小:8字节 原始数据:81 3C A0 E3 1F 30 43 E2 修改数据:19 3C A0 E3 08 30 83 E2 其他植物大战僵尸版本请自行根据本专栏所述原理去修改。

植物大战僵尸北美版使用RGBA32图像教程的评论 (共 条)

分享到微博请遵守国家法律