[ 前へ | 目次 | 次へ ]

スプライト描画

レンダラーが描画を行う方法には、これまでに扱ってきた直接描画の他に、 スプライト描画という方法が存在します。ここでは、このスプライト描画について説明します。

スポンサーリンク


スプライト描画

スプライト描画とは、本来ゲームなどでの2DCG 全盛期に、ハードウェアで実装されていたスプライト描画という機能を、 ソフトウェア的に実装したものです。 スプライト描画の概念は、アニメ映像の制作過程における、 セル画の概念と非常によく似ています。 具体的には、まず描画する図形や画像の数だけ、 スプライト(またはスプライト)と呼ばれる「層」をレンダラーに登録しておきます。 そして、描画時にそれらのスプライトをレンダラーで重ねて合成し、1 枚の絵を生成します。

スプライト描画が特に威力を発揮するのは、 アニメーション処理などを行う時です。 例えば、アニメーションの中に、動く図形(や画像)と動かない図形があったとしましょう。 この場合、1 回の画面に表示する絵を直接描画で用意すると、まず背景をクリアし、 そして全ての図形をdraw系関数で描画しなければなりません。そこでスプライト描画を使用すると、 最初に全ての図形をスプライトとして登録しておき、あとは毎回の描画時に、 動かしたいスプライトだけを動かせば済むので、プログラムの記述が簡単になりますし、 処理速度の面でも有利となります。

スプライト描画と直接描画は、組み合わせて使用する事も可能です。 それにはレンダラーを複数用意し、あるレンダラーの描画したグラフィックスデータを、 別のレンダラーにスプライトとして登録する、またはdrawGraphics で描き込むなどの方法を使用します。 適材適所でそれぞれの描画方法を組み合わせる事で、効率的なプログラミングが可能となります。

スプライトの基本操作

直接描画と異なり、スプライトはプログラム実行中に動かしたり、 色を変えたりなど、動的に活用します。 そこで、具体的なスプライトの生成を扱う前に、 スプライトを動的に活用するための基本操作について述べておきます。

スプライトの生成

実際のスプライトには様々な種類のものがありますが、それらは全てnew〜Sprite 関数で生成し ます。〜の部分にはスプライトの種類に固有の名称が入ります。具体的な生成は次章で扱います。

- 関数仕様 -
void new〜Sprite ( 〜 )

この関数は、スプライトを生成し、そのスプライトに固有の識別番号を返します。

スプライトの登録

生成したスプライトは、レンダラーに登録しなければ描画されません。 レンダラーにスプライトを登録するには、mountSprite 関数を使用します。

- 関数仕様 -
void mountSprite ( int SpriteID, int rendererID )

最初の引数SpriteID には、登録するスプライトのスプライトID を指定します。 スプライトID とは、スプライトに割り振られる識別番号で、 後に述べるスプライト生成関数が戻り値として返します。 続く引数rendererID には、登録先レンダラーのID を指定します。

スプライトの描画

レンダラーにすべてのスプライトを登録したら、 それらのスプライトを重ね合わせて合成し、1 枚のグラフィックスに描画する必要があります。 これには paintGraphics2D 関数を使用します。

- 関数仕様 -
void paintGraphics2D ( int rendererID )

引数のrendererIDには、レンダラーのIDを指定します。 この関数をコールするまで、スプライトの合成は行われないのでご注意ください。

各種スプライト

スプライトには、線や幾何学図形を描画するもの、 テキストを描画するもの、画像を描画するものなど、様々な種類のものが存在します。 以下では、各種スプライトの生成と使用方法を扱います。

点スプライト

点スプライトを生成するには、newPointSprite 関数を使用します。

- 関数仕様 -
void newPointSprite ( int x, int y, int radius )

引数x, y には点の座標を、radius には点の半径を指定します。

線スプライト

線スプライトを生成するには、newLineSprite 関数を使用します。

- 関数仕様 -
void newLineSprite ( int x1, int y1, int x2, int y2 )

引数x1, x2 には始点の座標を、x2, y2 には終点の座標を指定します。

長方形スプライト

長方形スプライトを生成するには、newRectangleSprite 関数を使用します。

- 関数仕様 -
void newRectangleSprite ( int x, int y, int width, int height, bool fill )

引数x, y には左上頂点の座標を、幅と高さを指定します。 最後の引数fill は、true の場合に塗りつぶし描画、false の場合に境界線のみの描画となります。

楕円スプライト

楕円スプライトを生成するには、newEllipseSprite 関数を使用します。

- 関数仕様 -
void newEllipseSprite ( int x, int y, int width, int height, bool fill )

引数x, y には左上頂点の座標を、幅と高さを指定します。 ここで指定した頂点領域に内接する楕円が描画されます。 最後の引数fill は、true の場合に塗りつぶし描画、false の場合に境界線のみの描画となります。

多角形スプライト

多角形スプライトを生成するには、newPolygonSprite 関数を使用します。

- 関数仕様 -
void newPolygonSprite ( int x[ ], int y[ ], bool fill )

引数x[ ], y[ ] には、多角形を構成する頂点の座標を、配列で指定します。最後の引数fill は、true の場合に塗りつぶし描画、false の場合に境界線のみの描画となります。

折れ線スプライト

折れ線スプライトを生成するには、newPolylineSprite 関数を使用します。

- 関数仕様 -
void newPolylineSprite ( int x[ ], int y[ ] )

引数x[ ], y[ ] には、多角形を構成する頂点の座標を、配列で指定します。

テキストスプライト

テキストスプライトを生成するには、newTextSprite 関数を使用します。

- 関数仕様 -
void newTextSprite ( int x, int y, int lineWidth, int lineHeight )

最初の引数rendererID には、レンダラーのID を指定します。続く引数x, x には、テキスト始点のアンダーライン(下線)の座標を指定します。座標は画面左上を原点( 0, 0 )とし、右方向にX 軸、下方向にY 軸で指定します。最後のlineWidth とlineHeight には、テキストの行幅と行間隔を指定します。描画時に行幅を超えた長いテキストは、自動で改行されて次の行に描画されます。

フォントサイズの設定

テキストの描画に使用するフォントの大きさを変更したい場合は、setSpriteFontSize 関数を使用します。

- 関数仕様 -
void setSpriteFontSize ( int SpriteID, int fontSize )

最初の引数SpriteID には、スプライトのID を指定します。続く引数fontSize には、フォントの大きさをpt(ポイント)単位で指定します。

pt というのはフォントの大きさを指定する一般的な単位で、画面表示する際に一つの基準となるのは大体12pt 前後でしょう。10pt だとやや細かい文字、15pt だと少し大きめの文字となります。ここで注意しなければならないのは、1pt が何ピクセルに対応するかというのは環境によって異なるという点です。著しく異なる事はありませんが、一文字あたり数ピクセルずれる事はよくあります。従って、テキストを描画する際は、あまりシビアではなく、ある程度ずれる事を想定したレイアウトをする事が推奨されます。

画像スプライト

画像スプライトを生成するには、newImageSprite 関数を用します。

- 関数仕様 -
void newImageSprite (
  int x, int y, int width, int height, int graphicsID
)

引数x, x には、画像を描画する左上頂点の座標を、width, height には幅と高さを指定します。最後の引数graphicsID には、描画するグラフィックスデータのID を指定します。

引数に指定するグラフィックスIDには、GraphicsライブラリのnewGraphics( string fileName )関数で画像ファイルから読み込んだものや、別のレンダラーで描画したものなどが利用できます。

プログラム例

それでは、上で扱った各種描画関数を使用してみましょう。以下のように記述し、実行してみてください。

なお、画像の描画を行う場合は、プログラムと同じフォルダに「Test.png」という名前のPNG 形式画像ファイルを置いてから実行してください。

このプログラムを実行すると、白いウィンドウが表示され、その上に様々な図形が表示されます。

実行結果
※文字に使用されるフォントは、環境によって異なります。フォントを明示したい場合にはsetSpriteFont( int SpriteID, string fontName )関数を使用してください。

※文字に使用されるフォントは、環境によって異なります。フォントを明示したい場合にはsetSpriteFont( int SpriteID, string fontName )関数を使用してください。



スポンサーリンク



この階層の目次
RINEARN からのお知らせ
※ VCSSL は RINEARN が開発しています。

リニアングラフやVCSSLの最新版をリリース、目盛りの位置や内容を自由に指定可能に!
2024-11-24 - リニアングラフ3D/2Dを更新し、自由な位置に、自由な表記内容の目盛りを描けるようになりました! 併せて、Java言語やVCSSLでの、プログラム制御用APIも拡張しています。詳細をお知らせします。

Exevalator 2.2 をリリース、TypeScript 対応によりWebブラウザ上で動作可能に
2024-10-22 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。新たに TypeScript に対応し、Webブラウザ上での式計算にも使えるようになりました。詳細を解説します。

アシスタントAI作成の舞台裏(その2、作成編)
2024-10-12 - アシスタントAIの作成方法解説の後編です。実際にChatGPTの「GPTs」機能を用いて、アシスタントAIを作成する手順や、独自の知識をもたせたり、精度を出すためのノウハウなどを解説しています。

アシスタントAI作成の舞台裏(その1、基礎知識編)
2024-10-07 - アシスタントAI作成方法解説の前編です。今回はまず、アシスタントAIを作る前に抑えておきたい、基礎知識を延々と解説しています。そもそもLLM型AIとはどんな存在か? RAGとは何か? 等々です。

ソフトの利用をサポートしてくれるアシスタントAIを提供開始!
2024-09-20 - RINEARN製ソフトの使い方の質問応答や、一部作業のお手伝いをしてくれる、アシスタントAIを提供開始しました。ChatGPTアカウントさえあれば、誰でも無料で使用できます。使い方を解説します。

Exevalator 2.1 をリリース、新たに Visual Basic に対応
2024-07-28 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。今回から、新たに Visual Basic(VB.NET)でも使用できるようになりました。詳細を解説します。

関数電卓 RINPn(りんぷん)、Esc キーで計算式の一発クリアが可能に
2024-07-20 - 関数電 RINPn の Ver.1.0.2 をリリースしました。今回から、キーボードの「 Esc 」キーを押すと、入力中の計算式を一発でクリアできるようになりました。詳細を解説します。

Exevalator 2.0 をリリース、互換性に注意が必要なバグ修正が 1 件
2024-07-14 - オープンソースの式計算ライブラリ「Exevalator (エグゼバレータ)」の2.0をリリースしました。今回の更新では、互換性に注意を要する 1 件のバグ修正があります。詳細を解説します。

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

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

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

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

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

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

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

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