我試圖讓我的OPENGL ES應用程序支持視網膜顯示。我添加了@ 2x擴展名的圖像,並將內容比例因子設置爲2.高分辨率圖像正確顯示在屏幕上,但質量嚴重受損。邊緣和模糊,它沒有我添加到資源文件夾中的圖像的質量。視網膜顯示圖像質量問題
我該如何解決這個問題?
我試圖讓我的OPENGL ES應用程序支持視網膜顯示。我添加了@ 2x擴展名的圖像,並將內容比例因子設置爲2.高分辨率圖像正確顯示在屏幕上,但質量嚴重受損。邊緣和模糊,它沒有我添加到資源文件夾中的圖像的質量。視網膜顯示圖像質量問題
我該如何解決這個問題?
我的應用程序基於默認框架,在基於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指着我在正確的方向。謝謝,最近,西緬的有益的評論。
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);
我希望這點能指引您正確的方向。
謝謝你的幫助。但即使嘗試了你所說的話,它也沒有顯示出質量。你能告訴我如何知道圖像是否被壓縮?如果我使用Multisampling?我會得到更好的結果嗎? – Aaron 2011-02-03 14:31:23
你可以添加一些代碼給你的問題,讓你如何加載到OpenGLES的紋理jist?如果你使用多重採樣(這更多的是優化),我認爲你不會得到更好的結果。 – 2011-02-03 18:30:02
在你EAGLView.m的initWithCoder:方法,添加以下代碼:
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
{
self.contentScaleFactor = [[UIScreen mainScreen] scale];
}
你測試它真實視網膜設備或模擬器? – Max 2011-02-03 09:46:29