8

私は OpenGL プログラミングを始めたばかりで、時計アプリケーションを構築しています。次のようなシンプルなものにしたい: http://i.stack.imgur.com/E73ap.jpg

ただし、私のアプリケーションは非常に「アンチエイリアスされていない」ように見えます: http://i.stack.imgur.com/LUx2v.png

Red Book に記載されている GL_SMOOTH_POLYGON メソッドを試しました。しかし、それは何もしていないようです。

Intel統合グラフィックスを搭載したラップトップで作業しています。このカードはGL_ARB_multisample などをサポートしていません。

この時点で、アプリがアンチエイリアス処理されているように見えるオプションは何ですか?

4

2 に答える 2

29

Intel 統合ビデオカードは、OpenGL アンチエイリアシングをサポートしていないことで有名です。ただし、これを回避することはできます。

最初のオプション: 手動スーパーサンプリング
テクスチャを画面の 2 倍の大きさにします。FBO を介してシーンをテクスチャにレンダリングしてから、テクスチャを半分のサイズでレンダリングして、バイリニア補間を使用して画面いっぱいに表示します。描画するピクセルが 4 倍になるため、(複雑なシーンでは) 非常に遅くなる可能性があります。

アンチエイリアシングが弱くなります (時計のようなデスクトップ ソフトウェアにはお勧めしません)。自分で見て:
アンチエイリアシングとスーパーサンプリング

2 番目のオプション: (高度)
シェーダを使用してMorphological Antialiasingを実行します。これは新しい手法であり、実装がどれほど簡単かはわかりません。一部の高度なゲームで使用されます。

3 番目のオプション:テクスチャを介してOpenGL のプリミティブをエミュレート
することにより、テクスチャと双一次補間を有利に使用します。テクニックはここで説明されています。

4 番目のオプション: 時計のすべての要素に個別のテクスチャを使用します。

たとえば、時間の矢印の場合、矢印の形をした平らな黒い GL_POLYGON を使用しないでください。代わりに、回転した GL_QUAD を使用し、イメージ プログラムで描画された時間矢印イメージでテクスチャリングします。次に、バイリニア補間により、回転時にアンチエイリアシングが処理されます。

このオプションは、労力が最も少なく、非常によく見えます。

5 番目のオプション:ソフトウェア レンダリング
をサポートするライブラリを使用する-

  • Qt
  • カイロ
  • Windows GDI+
  • WPF
  • XRender

このようなライブラリには、アンチエイリアス レンダリング用の独自のアルゴリズムが含まれているため、アンチエイリアスをビデオカードに依存しません。利点は次のとおりです。

  • すべてのプラットフォームで同じものをレンダリングします(これはさまざまなケースで OpenGL では保証されていません。たとえば、スクリーンショットの太い斜めの「目盛り」線は、長方形ではなく平行四辺形としてレンダリングされます)
  • 便利な描画関数がたくさんあります (「drawArc」、「drawText」、「drawConcavePolygon」、これらはグラデーションと境界線をサポートします。また、Image クラスなども取得します。)
  • Qt のように、より多くのデスクトップ アプリ タイプの機能を提供するものもあります。これは、時計アプリでも非常に便利です。例えば:
    • OpenGL アプリでは、おそらく 20 ミリ秒ごとにループしてクロックを再レンダリングし、よく考える必要はありません。これにより、不要な CPU サイクルが占有され、ラップトップの CPU がウェイクアップされ、バッテリーが消耗します。対照的に、Qt は、時計の一部を再描画する必要がある場合 (たとえば、時計の右半分がウィンドウで覆われなくなったとき、または時計が分矢印を 1 ステップ動かしたとき) について非常にインテリジェントです。
    • 時計のトレイ アイコンや設定ダイアログなどの実装に着手したら、Qt のようなライブラリを使用すると簡単に実装できます。すべてに同じライブラリを使用すると便利です。

不利な点はパフォーマンスがはるかに悪いことですが、それは時計アプリにとってはまったく問題ではなく、前述のインテリジェントな再描画機能を考慮に入れると好転します.

時計アプリなどの場合は、5 番目のオプションを強くお勧めします。OpenGL は主に、ゲーム、3D ソフトウェア、およびミュージック ビジュアライザーなどの高度なグラフィック処理に役立ちます。デスクトップ アプリの場合、これは低レベルであり、実装の違いが大きすぎます。

于 2010-11-06T06:37:00.223 に答える
0

最終解像度の2倍(またはそれ以上)でフレームバッファオブジェクトに描画し、その画像を実際のウィンドウに描画された単一のクワッドのテクスチャとして使用します。

于 2010-11-06T06:20:05.703 に答える