パスが重なった時の描画

May 5th, 2009

ちょっとしたことだけど、メモ。

昔、Guilloches を書いた時、初めは線をつないでいく部分をこうしていた。

g.lineStyle(1, color, 0.3);
g.moveTo((r * 2 + R + p) * scale, 0);

for (var i:int = 1; i <= steps; i++) {
	t += dt;
	x = (rR * Math.cos(t) + rp * Math.cos(rR/r * t)) * scale;
	y = (rR * Math.sin(t) + rp * Math.sin(rR/r * t)) * scale;
	g.lineTo(x, y);
}

が、これだとこんな感じになって線の重なりが表現できない。

仕方なく bitmapData にちょっとずつ draw するという変なことして重なった部分がより濃くなるようにしていた。

g.lineStyle(1, color, 0.3);
g.moveTo((r * 2 + R + p) * scale, 0);

bitmap.lock();
bitmap.fillRect(bitmap.rect, 0x000000);
for (var i:int = 1; i <= steps; i++) {
    t += dt;
    x = (rR * Math.cos(t) + rp * Math.cos(rR/r * t)) * scale;
    y = (rR * Math.sin(t) + rp * Math.sin(rR/r * t)) * scale;
    g.lineTo(x, y);
    if ((i & 7) == 0) {
        bitmap.draw(shape, matrix);
        g.clear();
        g.lineStyle(1, color, 0.3);
        g.moveTo(x, y);
    }
}
bitmap.unlock();

でも実はこれでいいことにちょっと前気づいた。

g.lineStyle(1, color, 0.3);
g.moveTo((r * 2 + R + p) * scale, 0);

for (var i:int = 1; i <= steps; i++) {
	t += dt;
	x = (rR * Math.cos(t) + rp * Math.cos(rR/r * t)) * scale;
	y = (rR * Math.sin(t) + rp * Math.sin(rR/r * t)) * scale;
	g.lineTo(x, y);
	g.moveTo(x, y);
}

パスを一旦切ってやればよかったみたい。

No comments

Leave a Reply

コメントを投稿する場合は下記の認証サービスのいずれかを経由してログインして下さい。

但し、認証を行うにはそのサービスのアカウントが必要です。