2009-10-20 33 views
0

這是關於iPhone上的一些openGLES鬼的問題。爲什麼我的像素顏色會在設備v模擬器上發生變化?

我已經注意到,在設備中的像素顏色和模擬器像素的顏色略有不同。例如,模擬器中的綠色像素可能爲(0,241,0),設備上可能爲(0,239,0)。這通常不是一個大問題(肉眼看起來他們看起來完全一樣),但我使用像素數據來編碼一些信息和顏色匹配需要準確。

我以爲我可以俯瞰GLES實現...我的幀緩衝區接收渲染設置使用下列命令的一些限制:

//生成一個屏幕外幀緩存/渲染渲染命中檢測多邊形 //創建幀緩衝 glGenFramebuffersOES(1,& hitDetectionFbo); glBindFramebufferOES(GL_FRAMEBUFFER_OES,hitDetectionFbo); //創建顏色緩衝區 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); (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)== GL_FRAMEBUFFER_COMPLETE_OES,@「Framebuffer尚未準備好呈現」);

我會很感激任何幫助或想法,一切完美的模擬器(顏色搭配如預期),但我開始失去了設備精度。

感謝, -S

+0

你正在繪製質感原始?如果是這樣,您是否使用Core Graphics解碼圖像文件來加載紋理數據? 如果是這樣,實現的不同可能在於Core Graphics解碼圖像數據的方式。解決這個問題的方法之一是將原始RGBA值存儲在外部文件中。 – prideout

回答

3

有很多的臺式機和iPhone,事實上,整個iPhone的不同型號之間的顏色變化(3GS的是顯着高於第一代和3G手機亮。)

此外,爲Mac OS默認顯示γ值從1.8改爲2.2,當雪豹出來讓你的模擬器的顏色會根據你正在運行的操作系統的版本有所不同。

Here are some tips上調整原始藝術品跨越顯示器匹配。在iPhone上,您還可以通過CGColorSpaceCreateCalibratedRGB來調整顏色空間顯示伽瑪,白色和黑色值,但它位於CoreGraphics級別。不知道它是否會在GL-ES世界中發揮作用。

如果精度是必須的,你可能想投資顏色校準裝置並匹配您的顯示器瓦特/各種型號的iPhone,然後由差異傾斜你的GL RGB值。這裏是an article(西班牙文),顯示如何對iPhone進行顏色校準。

祝你好運。

相關問題