为什么我的像素颜色会在设备v。模拟器上发生变化?

时间:2009-10-20 22:09:01

标签: iphone opengl-es

这是关于iPhone上一些openGLES幽灵的问题。

我注意到设备上的像素颜色和模拟器中像素的颜色略有不同。例如,绿色像素在模拟器中可能是(0,241,0),在设备上可能是(0,239,0)。这通常不是一个大问题(肉眼看起来完全一样)但我使用像素数据来编码一些信息,并且颜色匹配需要准确。

我假设我忽略了GLES实现的一些限制......我使用以下命令设置了接收渲染的帧缓冲:

//生成一个offscreen framebuffer / renderbuffer,用于渲染命中检测多边形   //创建帧缓冲区   glGenFramebuffersOES(1,& hitDetectionFbo);   glBindFramebufferOES(GL_FRAMEBUFFER_OES,hitDetectionFbo);   //创建colorbuffer   glGenRenderbuffersOES(1,& colorBuffer);   glBindRenderbufferOES(GL_RENDERBUFFER_OES,colorBuffer);   glRenderbufferStorageOES(GL_RENDERBUFFER_OES,GL_RGBA8_OES,SCREEN_WIDTH,SCREEN_HEIGHT);   glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES,GL_COLOR_ATTACHMENT0_OES,GL_RENDERBUFFER_OES,colorBuffer);   //创建深度缓冲区   glGenRenderbuffersOES(1,& depthBuffer);   glBindRenderbufferOES(GL_RENDERBUFFER_OES,depthBuffer);   glRenderbufferStorageOES(GL_RENDERBUFFER_OES,GL_DEPTH_COMPONENT24_OES,SCREEN_WIDTH,SCREEN_HEIGHT);   glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES,GL_DEPTH_ATTACHMENT_OES,GL_RENDERBUFFER_OES,depthBuffer);

NSAssert(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)== GL_FRAMEBUFFER_COMPLETE_OES,@“Framebuffer尚未准备好渲染”);

我会感激任何帮助或想法,一切都在模拟器中完美运行(颜色符合预期)但我开始在设备上失去精确度。

谢谢, -S

1 个答案:

答案 0 :(得分:3)

桌面和iPhone之间存在很多颜色差异,事实上,不同型号的iPhone(3GS比第一代和3G手机更亮)。

此外,当Snow Leopard出现时,Mac OS的默认显示伽玛值从1.8变为2.2,因此您的模拟器颜色将根据您运行的操作系统版本而有所不同。

Here are some tips调整原始图稿以匹配各个显示。在iPhone上,您还可以通过CGColorSpaceCreateCalibratedRGB调整颜色空间显示灰度,白色和黑色值,但它在CoreGraphics级别。不确定它是否会对GL-ES世界产生影响。

如果精度是必须的,您可能需要投资一个颜色校准设备,并与各种iPhone型号的显示器匹配,然后根据差异扭曲您的GL RGB值。这是an article(西班牙文),展示了如何对iPhone进行色彩校准。

祝你好运。