[ 前へ | 目次 | 次へ ]

ラスタ制御描画

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

スポンサーリンク


ラスタ制御描画

ラスタ制御描画の仕組み

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

ラスタデータ

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

プログラム例

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

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

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



スポンサーリンク



この階層の目次
お知らせ

Vnanoがオープンベータ版に移行、VCSSLの実行環境で標準で実行可能に
2021年04月07日 - ソフト内組み込み用スクリプトエンジン&言語「 Vnano 」がオープンベータ版に移行し、併せて、VCSSLの実行環境でもVnanoコードの実行が可能になりました。詳細をお知らせします。

リニアングラフの最新版をリリース、2D版でも描画エンジンの直接操作が可能に
2021年04月03日 - リニアングラフ2D/3Dの最新版をリリースしました。それぞれのアップデート内容をお知らせします。今回から、2D版でもJava言語APIによる描画エンジンの直接操作が可能になりました。

RINPn のオープンベータ版をリリース! 詳細な公式ガイドも同梱&公開
2021年03月08日 - 2019年より開発進行中のプログラム関数電卓「 RINPn(りんぷん)」が、正式リリースに向けた最終準備段階として、オープンベータ版へと移行しました。その詳細をお知らせします。

新着
[公式ガイドサンプル] 引き算の結果を画面に表示する

「VCSSLスタートアップガイド」内のサンプルコードです。引き算を行って、結果を画面に表示します。
2021年07月08日
[公式ガイドサンプル] 式を複数行にわたって書く

「VCSSLスタートアップガイド」内のサンプルコードです。足し算を行う式を、複数行にわたって記述します。
2021年07月07日
[公式ガイドサンプル] 足し算の結果を画面に表示する

「VCSSLスタートアップガイド」内のサンプルコードです。足し算の結果を求めて、画面に表示します。
2021年07月06日
Vnano版 | ローレンツ方程式を数値的に解くプログラム

ローレンツ方程式を4次ルンゲ=クッタ法によって解き、グラフ描画用のデータを出力するプログラムです。
2021年02月12日
Vnano版 | 積分値のグラフ描画用データを出力するプログラム

数値的に積分を行い、結果の関数をグラフに描くためのデータを出力するコードです。
2020年12月20日
開発元Twitterアカウント