Anti Aliased Line

http://www.geocities.co.jp/SiliconValley-Sunnyvale/6769/cpp/linedrawer040705v01.zip

C++で書き直してみた。D言語とは違って、固定小数点型と浮動小数点型をtemplateのparameterで切り替えるコードが苦も無く書けるのが素晴らしい。


線の傾きが負の時の事を考慮していなかった点を修正。
BottomTop座標系への変換処理は未実装。
端点の描画は省略。


速度を計ってみると、D言語版のより倍以上速い。コンパイラの最適化具合が違うのかなぁ。。

線の長さや傾きによっても速度は変わるけれど、Athlon1.4GHzで大体1秒に10万本くらい描画出来る速度。

速度はハードウェアに依存する書き方をすれば、今のCPUでも5〜10倍くらいは上げられるんだろうけれど、DSP的なハードを使えば数100〜数1000倍に跳ね上るだろうし、あまり競っても意味が無い…。


線の幅を変えられるようにするのが使い勝手が上がって良いかもしれない。でも、それってポリゴンを描くのと何か違うんだろうか?


AdobePhotoshopは、1pixel以上で線幅を0.01ドット単位で変えられる。FireworksMX2004は1pixel単位。PSの線の品質は、Fireworksの線とあまり変わらない気がする。むしろグラデが荒いかも。


AntiAliasedした線の輝度にむらが出てしまうように感じるのは、1ドットの明るい線のほうが、2ドットの半分の明るさの線が並ぶより目立つからだと思う。(表示している画像はFireworksMX2004で作成)