2012-01-05 11 views
2

私は、アンチエイリアス台形を上から描画し、線で描画しています。ラインが整数ピクセルでない場合、終了ピクセルは背景グレイレベルと台形グレイレベルの加重平均である。行は、両端に長いその後、128.5ピクセルであれば、グレーレベルは次のとおりです。アンチエイリアス台形を描く

0.25*(trapezoid_greylevel)+0.75*(background_greylevel) 

残念ながら結果は(私は線形化ディスプレイ上でこれをチェックしました)非常に滑らかではありません。

Jagged trapezoid

は、私は、各ライン終わりに私はアカウントすべて適切なグレーレベルに到達することを周囲のピクセルに取る必要があることを前提としていますが、私はそれを行う方法を考え出すことはできません。すべてのポインタ?

答えて

2

台形は凸であるため、台形に対して点を分類することは容易です。台形のすべての台形の左辺(反時計回りに台形を向いていると仮定します)の場合、点が内側にあります。

四角形のピクセル(およびピクセルより大きい台形)を仮定すると、四角形を四角形で分類することによって、台形に関してピクセルを簡単に分類できます。四隅がすべて外側にある場合、ピクセルは外側にあります。四隅がすべて内側にある場合、ピクセルは内側にあります。他のピクセルでは、スーパーサンプリングによってアンチエイリアス処理を行うことができます。

Warnock's algorithmのようにクアッドツリーを使用して適応レンダリングを行うこともできますが、 台形(または一般的な凸多角形)に対してより堅牢な交差テストを実装する必要があります。四角形とトラップゾイドが離れているとき、または四角形が台形の内側にあるときを検出する必要があります。画素レベルを越えるクオッドツリーの深度は、アンチエイリアスがどのくらい精細であるかを決定する。

最後に、正確なレンダリングを実行するには、台形で覆われたピクセルの面積の割合を計算します。ポリゴンクリッピングの問題で、Sutherland–Hodgman algorithmを使用できます。

+0

@Robsもしあなたがこれを実装するならば、私はあなたが共有できるなら、画像とコードを見たいと思います。ありがとう。 – lhf

0

速度が問題でない場合は、アンチエイリアシングされていない台形を解像度の4倍または8倍で描画し、次に画像を直線的に縮小することが考えられます。