2011-02-03 18 views
6

網膜ディスプレイをサポートするために私のOPENGL ESアプリを作ろうとしていました。 @ 2x拡張子で画像を追加し、内容を2にしました。高解像度の画像が画面に正しく表示されていますが、画質が大幅に低下します。エッジとぼやけて、リソースフォルダに追加した画像の品質がありません。網膜ディスプレイ画質問題

どうすればこの問題を解決できますか?

+0

はあなたが本当の網膜デバイスまたはシミュレータ上でそれをテストしている:この方法は、次のコードを追加しますか? – Max

答えて

5

私のアプリは、デフォルトのフレームワークに基づいており、Retinaベースのデバイスで実行しているときにこの問題が発生していました。具体的に私のフレームバッファは、私が望むように640x960ではなく320x480で作成されていました。申し訳ありませんが、問題は、renderBufferStorage:fromDrawable:(glRenderbufferStorageを代わりに呼び出しますが、デフォルトでは幅と高さのネイティブデバイスピクセルではなくレイアウトピクセルを指定します)によって作成されたフレームバッファに問題があるためです。

私はinitWithCoder eaglLayer.drawablePropertiesを設定する行の行の下に次のコードを追加しました: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; 
} 

正しい方向に私を指しているためデビッド・アマドールのpostのおかげで。おかげさまで、最近、simeonの有益なコメントに。あなたのEAGLView.m initWithCoderで

+0

網膜の寸法を明示的にチェックすることはお勧めしません。これは、すべての場合に機能するわけではありません(例:網膜iPad)。スクリーンのスケールファクタを使用するより一般的なソリューションについては、私の答えを参照してください。 – simeon

+0

ありがとうsimeon。今、やや遅れて、修正されました! :) –

+0

retina pre-iOS 4.0デバイスがないので、 'else'ブランチは必要ありません。したがって、mainScreenが' scale'セレクタに応答しない場合、あなたはそれが非網膜であると確信することができます。 – simeon

-1

OpenGLはレンダリングで最大限の解像度で自動的にレンダリングされます(ビューポートを画面の幅や高さなどに設定しているため)OpenGLレンダリングの問題が発生します。

OpenGLESでは、イメージに追加したサフィックス@ 2Xは気にしません(これはCocoa Touchフレームワーク用です)。ただし、画像の解像度には注意が必要です。最良の結果を得るには、幅と高さが2の累乗である正方形の画像(1024、2048など)を使用する必要があります。

正しいイメージフォーマットを使用しているテキストをOpenGLESに読み込んでいるときに、イメージタイプを圧縮していないことを確認してください。

もう1つのことは、テクスチャパラメータです。例:

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

これはあなたが正しい方向を指していることを希望します。

+0

こんにちは感謝の助けを求める。しかし、あなたが言ったことを試した後でさえ、それは品質を示さない。画像が圧縮されているかどうかを教えてください。マルチサンプリングを使用すると、より良い結果が得られますか? – Aaron

+0

OpenGLESにテクスチャをロードする方法のジストを与えるいくつかのコードを質問に追加できますか?私はあなたがマルチサンプリングを使用した場合、より良い結果を得られるとは思わない(これは最適化のほうが多い)。 –

1

if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
{ 
    self.contentScaleFactor = [[UIScreen mainScreen] scale]; 
} 
関連する問題