[ 前へ | 目次 | 次へ ]

ラスタ制御描画

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

スポンサーリンク


ラスタ制御描画

ラスタ制御描画の仕組み

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

ラスタデータ

ラスタデータとは、グラフィックスデータ上の全てのピクセルにおける色情報を表すデータです。 色情報には赤(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〜関数を使用します。

プログラム例

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

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

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



スポンサーリンク



この階層の目次
お知らせ

各ソフトウェアをアップデート、リニアングラフのコマンド拡張やVCSSLの英語対応など
2024/02/05 - 各ソフトの一斉アップデートの内容をお知らせします。今回は、リニアングラフのコマンド機能を大幅拡張したのがメインです。また、VCSSLのメッセージ類の英語対応も行いました。

Vnano の Ver.1.1 で実装した反復計算高速化の内側
2024/01/17 - 前回のお知らせ記事の続編です。スクリプトエンジン Vnano の Ver.1.1 において実施した高速化を、エンジン内部の実装面から掘り下げて解説します。

スクリプトエンジン Vnano の Ver.1.1 を公開、同じ内容の反復実行が劇的に高速化
2023/12/22 - スクリプトエンジン Vnano の最新版を公開しました。同じ計算式やスクリプトを反復実行する速さが、大幅に向上しました。次期版リニアングラフ3D内での活用例を交えつつ、詳しく解説します。

新着
[公式ガイドサンプル] 各種の図形や画像を描画する

「VCSSL 2DCG開発ガイド」内のサンプルコードです。図形や画像などを描画します。
2022-12-16
角度の「度」とラジアンとを相互変換し、図示もするツール

45度などの「度」の値と、ラジアンの値とを相互に変換できるツールです。対応する角度の図示もできます。
2022-11-22
[公式ガイドサンプル] 立体モデルを回転させるアニメーション

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、アニメーションで回転させ続けます
2022-11-18
[公式ガイドサンプル] 立体モデルを回転させる

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、指定した角度だけ回転させます。
2022-11-17
[公式ガイドサンプル] 四則演算の計算順序や、カッコを使った順序指定

「VCSSLスタートアップガイド」内のサンプルコードです。四則演算が計算される順序や、カッコを使って順序を指定する方法を例示します。
2022-10-31