这是关于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
答案 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进行色彩校准。
祝你好运。