2011-02-03 69 views
6

我試圖讓我的OPENGL ES應用程序支持視網膜顯示。我添加了@ 2x擴展名的圖像,並將內容比例因子設置爲2.高分辨率圖像正確顯示在屏幕上,但質量嚴重受損。邊緣和模糊,它沒有我添加到資源文件夾中的圖像的質量。視網膜顯示圖像質量問題

我該如何解決這個問題?

+0

你測試它真實視網膜設備或模擬器? – Max 2011-02-03 09:46:29

回答

5

我的應用程序基於默認框架,在基於Retina的設備上運行時出現此問題。具體來說,我的幀緩存是在320x480而不是640x960的情況下創建的。抱歉詹姆斯,但這不是自動的,因爲問題是由renderBufferStorage:fromDrawable:(它調用glRenderbufferStorage,但指定佈局像素,而不是本機設備像素的寬度和高度,默認情況下)創建的幀緩衝區。

我添加下面一行行下面的代碼設置eaglLayer.drawableProperties的initWithCoder:EAGLView.m

UIScreen *mainScreen = [UIScreen mainScreen]; 
if ([mainScreen respondsToSelector:@selector(scale)]) 
{ 
    // iOS 4.0 and up (further to simeon's comment) 
    const CGFloat scale = mainScreen.scale; 
    self.contentScaleFactor = scale; 
    eaglLayer.contentsScale = scale; 
} 

感謝David阿馬多爾的post指着我在正確的方向。謝謝,最近,西緬的有益的評論。

-1

OpenGLES將自動在視網膜顯示器上以最大可能的分辨率呈現(因爲您已將視口設置爲屏幕的寬度和高度等)等等,所以問題來自您的OpenGL渲染。

OpenGLES不關心你添加到圖像的後綴@ 2X(這是Cocoa Touch框架)。但是,它確實關心圖像的分辨率。爲了獲得最佳效果,您應該使用寬度和高度爲2的冪的方形圖像(例如1024,2048等)。

你應該確保當你正在使用正確的圖像格式加載OpenGLES中的紋理時,並且你沒有以任何方式壓縮它。

你應該嘗試的另一件事是紋理參數。例如:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

我希望這點能指引您正確的方向。

+0

謝謝你的幫助。但即使嘗試了你所說的話,它也沒有顯示出質量。你能告訴我如何知道圖像是否被壓縮?如果我使用Multisampling?我會得到更好的結果嗎? – Aaron 2011-02-03 14:31:23

+0

你可以添加一些代碼給你的問題,讓你如何加載到OpenGLES的紋理jist?如果你使用多重採樣(這更多的是優化),我認爲你不會得到更好的結果。 – 2011-02-03 18:30:02

1

在你EAGLView.m的initWithCoder:方法,添加以下代碼:

if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
{ 
    self.contentScaleFactor = [[UIScreen mainScreen] scale]; 
}