「tmlib.js 怒濤の 100 サンプル!!」を試す その54

その54。

tmlib.js 怒濤の 100 サンプル!! – Graphics(HTML5 Canvas) 編

今回試すサンプルは「透明度・合成」の「合成タイプを設定しよう(destination-out)」です。
ではサンプルが掲載されているのでまずは見てみましょう。
中央のボタンを押してみて下さい。
欠けた赤い円が描画されたと思います。

/*
* 定数
*/
var SCREEN_WIDTH = 465;
var SCREEN_HEIGHT= 465;
tm.main(function() {
// canvas インスタンス生成
var canvas = tm.graphics.Canvas("#world");

// 幅, 高さを指定
canvas.resize(SCREEN_WIDTH, SCREEN_HEIGHT);
// 画面にフィットさせる
canvas.fitWindow();

// 円を描画
canvas.fillStyle = "rgb(255, 0, 0)";
canvas.fillCircle(230, 150, 100);

// グローバルαを指定
canvas.globalCompositeOperation = "destination-out";

// 円を描画
canvas.fillStyle = "rgb(0, 255, 0)";
canvas.fillCircle(180, 250, 100);
canvas.fillStyle = "rgb(0, 0, 255)";
canvas.fillCircle(280, 250, 100);

// 補助線
canvas.globalCompositeOperation = "source-over";
canvas.strokeStyle = "#aaa";
canvas.strokeCircle(230, 150, 100);
canvas.strokeCircle(180, 250, 100);
canvas.strokeCircle(280, 250, 100);
};

今回も勉強するのは20行目になります。
合成タイプを指示しているプロパティです。
その48で詳しく説明していますので確認してみてください。

20行目

canvas.globalCompositeOperation = "destination-in";

合成タイプとして「destination-out 」が指定されています。
図形同士が重ならなかった部分を表示する合成タイプになります。
重なり順が変わるので注意です。

23~26行目

それぞれの円のスタイル(色)と円を描画しています。
20行目で指定した合成タイプで表示されているのが確認できます。

基本的にはその50で勉強した「 source-out 」と同じなんですが、基本となる円が違います。
source-out 」では後に描画された円を先に描画された円で合成処理していましたが、
destination-out 」では先に描画された円を後に描画された円で合成処理します。
処理の順番としては以下のようになります。

  1. 赤円 + 緑円 = 残りの赤円
  2. 残りの赤円 + 青円 = さらに残った赤円

ですのでサンプルでは赤円が緑と青の円に削られたような形になるわけです。

重なり順が変わります。
source-out 」では後から描画されたものが上となっていましたが、「 destination-out 」では先に描画されたものが上となります。
基本となる円が変わるからでもありますが、赤→緑→青の順になります。
この合成タイプでは重なり順は確認しにくいですけどね。

29~33行目

補助線を描画しています。
どこが表示されているか表示されていないかハッキリわかりますね。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です