私は、OpenHeatMapオープンソースプロジェクト用に、FlashとHTML5/Canvasのレンダラを並列に保ちます。私は2つのバージョン間の分数座標で塗りつぶされたポリゴンのレンダリングに矛盾があります。エッジを共有する2つのポリゴンをレンダリングすると、Canvasはそのエッジに沿って目に見える結合を表示しますが、Flashは同じ色であれば違いを目にすることなく2つのフレームをシームレスに融合します。HTML5キャンバスでポリゴンのエッジステッチのアーチファクトを回避するにはどうすればよいですか?
http://web.mailana.com/labs/stitchingbug/
[ガクは、スパム防止の画像であることから、これを停止しますが、スクリーンショットのweb.mailana.com/labs/stitchingbugについてはこちらを参照してください。私はこの問題を示すために、ここでは最小限のページを一緒に入れています.PNG]
ソースは、同じことをやってFlashプロジェクトと一緒に、ここにある:
github.com/petewarden/stitchingbug
根本的な問題は、それがどんな複雑な多角形を行うことは不可能だということですr縫い目なしでポリゴンをつなぎ合わせることができない場合は、 Flashの塗りつぶしルールは正確には分かりませんが、3Dレンダラーと同様に正しい結果が得られます。この問題を回避するには、誰でもクライアント側の修正がありますか?それはクロスブラウザーなので、故意に見えるようになっているので、使用されるルールへの参照も高く評価されます。キャンバスコードは次のとおりです。
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'rgb(0,0,0)';
ctx.beginPath()
ctx.moveTo(0, 0);
ctx.lineTo(50.5, 0);
ctx.lineTo(50.5, 100);
ctx.lineTo(0, 100);
ctx.closePath();
ctx.fill();
ctx.beginPath()
ctx.moveTo(50.5, 0);
ctx.lineTo(100, 0);
ctx.lineTo(100, 100);
ctx.lineTo(50.5, 100);
ctx.closePath();
ctx.fill();
ストーミング:各ポリゴンの中心を計算して描画するときに、中心から外側に向かってポイントをプッシュ少量(たぶん0.5)。アンチエイリアシングをわずかにオーバードローします。 – Phrogz
[ハックなしでこの問題を解決できない理由を理解するには、[この回答](http://stackoverflow.com/questions/15631426/svg-fill-not-filling-boundary/15638764#comment22224474_15638764)の後半を参照してください。アンチエイリアシングが関与している場合は、ストロークやアンダーフィルのようになります。 – Phrogz