iPhone OpenGLES纹理 - 彩色条纹

时间:2010-05-17 18:38:03

标签: iphone opengl-es png cocos2d-iphone textures

我在iPhone上遇到openGL的问题,我肯定必须有一个简单的解决方案!

当我加载纹理并显示它时,我得到了许多我认为称为“颜色条带”的颜色,其中颜色,特别是渐变颜色,似乎会自动“优化”。

为了证明我自己的代码没有任何问题,我下载了iPhone'Crashlanding'应用程序并替换了背景图像,正如您在下图中所看到的(从模拟器中获取),确切地说同样的事情发生了左边的图像是原始的PNG,右边的图像是游戏中的图像。这几乎就像它的调色板缩小到256色一样。

Screenshot

我确信这与我保存图像的格式有关,虽然它不会发生在PNG上,但无论我选择何种图像格式,它似乎都会发生。

我的头脑!如果要重新创建此功能,只需下载崩溃登陆应用程序,然后替换背景。非常感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

iPhone不支持24位彩色格式(每种颜色8位)。它支持(未压缩):

  • 565格式,红色= 5位,绿色= 6位,蓝色= 5位
  • 5551格式,红色= 5位,绿色= 5位,蓝色= 5位,alpha(透明度) - 1位
  • 4444格式,红色/绿色/蓝色/透明度为4位。

因此,如果您将以红色绘制0到255之间的渐变,您将看到24位格式的256个渐变,但是565/5551格式中只有32个渐变,或者4444中只有16个渐变.24位色彩正在被转换“在飞行中”,所以看起来它得到了支持,但事实并非如此。

这就是为什么有色带。

/这对OpenGL ES 1.0来说是真的,不知道有关2.0的详细信息/

更新:我的错误。 iPhone支持其他格式(8888),但也许,应用程序本身有转换?

更新2 :啊,你正在使用cocos2d。并且不要在图像中使用(我假设)透明度。 Cocos2d将这种图像转换为565格式。如果您需要,我认为您必须将cocos2d修改为“unmpliment”此优化。

答案 1 :(得分:0)

您应该更改Cocos2d的GLView的像素格式。这是如何做到的。

如果您使用Cocos2d的模板来创建新项目,则会有一个名为AppDelegate.m的文件。在该文件中找到此方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

然后在方法内你会发现:

CCGLView *glView = [CCGLView viewWithFrame:[_window bounds]
                               pixelFormat:kEAGLColorFormatRGB565
                               depthFormat:0
                        preserveBackbuffer:NO
                                sharegroup:nil
                             multiSampling:NO
                           numberOfSamples:0];

(可能会有所不同,具体取决于您的Cocos2d版本。我的是2.1)

无论如何,你只需要将pixelFormat从kEAGLColorFormatRGB565(红色,绿色,蓝色分量,每个5,6和5位)更改为kEAGLColorFormatRGBA8(红色,绿色,蓝色和alpha分量各8位)。请注意,这意味着更多的内存使用(16位与24位),可能性能更低。