ラスタ制御描画

この章では、最も直接的な描画方法であるラスタ制御描画について扱います。

- 目次 -

ラスタ制御描画

ラスタ制御描画の仕組み

これまで扱ってきた直接描画やスプライト描画は、レンダラーに用意されたペイントツール的な機能を用いて、 図形などを描き込んでいく方式でした。それに対してラスタ制御描画は、 そのような高度な機能は使用せず、グラフィックスデータの保持するピクセル情報である 「 ラスターデータ 」を直接的に操作する事により、描画を行う方式です。

ラスタデータ

ラスタデータとは、グラフィックスデータ上の全てのピクセルにおける色情報を表すデータです。 色情報には赤(Red)、緑(Green)、青(Blue)、透明度(Alpha)の4 つの要素がありますが、 VCSSL ではこれらをそのまま4 つの独立なラスターデータとして扱います。

VCSSL では、ラスターデータを [ 高さ ] × [ 幅 ] の2 次元配列として扱います。 配列のインデックスは[ 行 ][ 列 ]となり、 行は上から、列は左から数えます。配列の型はint 型で、 そのピクセルにおける色の強度を 0 〜 255 の範囲で保持します。

少し具体的な話をすると、青色成分のラスターデータをblue[ ][ ]として、 blue[ 0 ][ 0 ]は、グラフィックスデータの左上端のピクセルにおける、 青色の強度を表します。同様にblue[ 10 ][ 100 ]は、グラフィックスデータの上から10 個目、 左から100 個目のピクセルにおける、青色の強度を表します。

ラスターデータの描画

任意のラスターデータの内容を描画するには、レンダラーのsetPixel 関数を使用します。

- 関数仕様 -
void setPixel (
  int rendererID,
  int red[ ][ ], int green[ ][ ], int blue[ ][ ], int alpha[ ][ ]
)

最初の引数rendererID でレンダラーのID を指定します。 続く引数red、green、blue、alpha でラスターデータを指定します。

ラスターデータ配列のインデックスは[ 行 ][ 列 ]でピクセル位置を指定し、 値はその位置のピクセルにおける色強度(0〜255)を表します。

この関数をコールすると、受け取ったラスターデータの内容に基づいて、 レンダラーがグラフィックスデータへの描画を行います。

なお、以下のように、一つの配列で全色成分をまとめて指定する事もできます。

- 関数仕様 -
void setPixel ( int rendererID, int color[ ][ ][ ] )

この場合は、color に各ピクセルの色を格納して渡します。 配列のインデックスは[ 行 ][ 列 ][ 色成分の番号 ] で、 色成分の番号は 赤=0, 緑=1, 青=2, α=3 です。

ラスターデータの取得

現在レンダラーが保持しているグラフィックスデータの内容から、 各色成分のラスターデータを取得するには、色に応じて以下の4 つの関数を使用します。

- 関数仕様 -
int[ ][ ] getPixelRed ( int rendererID )
int[ ][ ] getPixelGreen ( int rendererID )
int[ ][ ] getPixelBlue ( int rendererID )
int[ ][ ] getPixelAlpha ( int rendererID )

引数rendererID にはレンダラーのID を指定します。これらの関数は上から順に、 それぞれ赤(Red)、緑(Green)、青(Blue)、透明度(Alpha)成分のラスターデータを、 int 型の2 次元配列で返します。配列のインデックスは[ 行 ][ 列 ]となり、行は上から、列は左から数えます。

なお、既存の画像ファイルの内容からラスターデータを取得するには、 まずレンダラーのdrawGraphics 関数などで画像ファイルの内容を描き込んでから、 そのレンダラーに対して上のgetPixel〜関数を使用します。

プログラム例

実際に簡単な模様のラスターデータを作成し、描画を行って見ましょう。 以下のように記述し、実行してみてください。

Sample.vcssl

このプログラムを実行すると、白いウィンドウが表示され、その上にカラフルな長方形が重なって表示されます。

実行結果
カラフルな長方形が重なって表示されます。