11

GL_LINE_SMOOTH はハードウェア アクセラレーションではなく、すべての GFX カードでサポートされていないため、GL_LINE_SMOOTH と同じように見える 2D モードで滑らかな線を描くにはどうすればよいでしょうか?

Edit2:私の現在の解決策は、2 つの四角形から線を引くことです。これは、エッジから透明度がゼロになり、これらの 2 つの四角形の間の色が線の色になります。基本的な滑らかな線のレンダリングには十分に機能し、テクスチャリングを使用しないため、レンダリングが非常に高速です。

4

3 に答える 3

11

したがって、次のない滑らかな線が必要です。

  • ラインスムージング。
  • 全画面アンチエイリアシング。
  • シェーダー。

大丈夫。

あなたの最善の策は、Valve のAlpha-Tested Magnification 技術を使用することです。ニーズに合わせた基本的な考え方は、テクスチャの中心が 1.0 の距離である、線からの距離を表すテクスチャを作成することです。これはおそらく 1D テクスチャである可能性があります。

次に、ペーパーに記載されている手法 (アンチエイリアス バージョンを含む固定関数で動作する手法の多く) を使用して、線を表すクワッドを描画します。明らかに、アルファブレンディングが必要になります (したがって、順序に依存しません)。線幅を使用して適切な色になる距離を制御し、細い線または太い線を作成できます。


シェーダーでこれを行うことは、テクスチャがないことを除いて、実質的に上記と同じです。距離テクスチャにアクセスする代わりに、距離が渡され、頂点シェーダーから補間されます。クワッドの左端の場合、頂点シェーダーは 0 を渡します。右端の場合、1 を渡します。これに 2 を掛けて 1 を引き、絶対値を取ります。

それがラインからの距離です (ラインはクワッドの中心です)。次に、Valve のアルゴリズムとまったく同じように、その距離を使用します。

于 2012-05-12T00:10:57.000 に答える
3

フルスクリーン アンチエイリアシングをオンにしてクワッドを使用することが、私の最初の選択肢です。

于 2012-04-27T16:25:17.800 に答える
1

現在、これを行うために 2 つまたは 3 つのクワッドを使用しています。これが最も簡単な方法です。

  • 線の太さ <= 1px の場合、必要なクワッドは 2 つだけです。
  • 線の太さが 1px を超える場合は、中央に 3 番目のクワッドを追加する必要があります。
  • 線の太さ >= 1px の場合、フェード エッジの四角形の太さを変更してはなりません。

下の画像では、青い枠線で囲まれたクワッドを確認できます。白い色は完全な不透明を意味し、黒い色は不透明度ゼロ (完全に透明) を意味します。

ここに画像の説明を入力

于 2012-08-20T10:09:04.760 に答える