2016-06-28 15 views
0

私はOpenGLベースのGUIを持っています。私は様々なスケールに対応できるように超解像度を使用しています。画像を拡大する代わりに、縮小されます(誰かが4000x4000 +解像度で動作している場合を除きます)。OpenGL超解像度の問題

問題は、OpenGLはスムーズに縮小されていないようです。スケーリングが最近傍であるかのようにアーティファクトがあります。 1 I:ここで

glBindTexture(GL_TEXTURE_2D, tex); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 

は、成果物のサンプルで、スケーリングが2である:これらは私が使用して設定されている

(例えば、テキストのエッジは、彼らが元になっていないにもかかわらず、ブロッキーです)信じる。たぶんそれはウィンドウのエッジなどのために正確ではありません。

enter image description here

あなたは左端が完璧に見える(それはしかしではありません)が、右端はそれで奇妙な休憩を持って見ることができます。元のグラフィックは完全に対称で、アーティファクトはありません。

私はGL_NEAREST、GL_LINEARを試しました。ミップマッピングがありません。

確かにOpenGLはスケーリングに劣りませんか?私はバイキュービックスケーリングのようなもの、あるいは良い結果を生み出すものを望みます。

私はOpenGL 1.1を使用しています。私は潜在的にイメージを拡大縮小することができますが、ウィンドウサイズが変わるたびにそれを行わなければならず、CPUが遅くなる可能性があります。

一部の画像にもエッジがギザギザになっています。超解像度の全体的なポイントは、これを避けることでした;/

いくつかの設定がありますか?

+1

スーパーレゾリューションは、ダウンサンプリングに関する懸念があるため、ちょっとミスリーディングです。それにもかかわらず、最も近いものから直線的なものに変更すると、小さなスケーリングで差が見られるはずです(例:オリジナルの1/1.2)。 'GL_NEAREST'は最近隣の補間です。 – mainactual

答えて

0

あなたが提供したコードでは、私は問題の原因を推測します。

のイメージをロードするか、少なくとものテクスチャパラメータをglParameteriに設定する前に、メモリを割り当ててください。また、GL_TEXTURE_MIN_FILTER


GL_LINEARに設定し、おそらくあなたは、2回以上、元の解像度を使用して、スーパーサンプリング(SSAA)を意味し、滑らかな画像を得るためにそれをダウンサンプリング?

0

それはそれはリニアフィルタリング(バイリニア)を使用していることを、あなたのイメージから見えるん 異方性フィルタリングを使用してみてください:

glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &aniso); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, aniso); 

異方性フィルタリングは、異なるレベルで適用することができ、このコードは最大レベルでそれを適用しますあなたが好きな場合はanisoより小さい数字を使うことができます。これらはあなたが拡張子のdefenitionsを持っていない場合、彼らはこのされ、拡張子のマクロである: "の信号を話すとき

#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE 
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF 
3

最初に、信号理論を理解する必要があり、すなわちNyquist Theorem(そのWikipediaのページには、過度に固有のものですこの原則は、画像を含むあらゆる種類の離散的にサンプリングされた信号に対して普遍的である。ダウンサンプリング時に常にになる必要があります。lowpass anti aliasing filterを適用すると、エイリアシングアーチファクトの発生を避けるために、サンプリング周波数の半分以上の周波数成分がすべてカットされます。フィルタリングを行わなくても、線形積分ダウンサンプラでもアーティファクトが生成されます。テクスチャのローパスフィルタを実装するリアルタイムグラフィックスの方法は、ミップマップです。すべてのミップマップレベルは、次の高いレベルの正確に半分の周波数でカットオフします。

あなたは今、2つのオプションがあります。

  • をミップマッピング実装行うにはまともな事は中に過剰の解像度でレンダリングしていないだろうダウンサンプリングフラグメントシェーダもちろん

を実装まず、のGUIを正確ににレンダリングします。

関連する問題