SoftwareSprite_Overview

# ソフトウェアスプライト概要

## サンプル実行画面

## 説明

ソフトウェアスプライトは、TWLおよびNITROの３Ｄグラフィックスエンジンの四角形ポリゴンを用いて、キャラクタの表示を行います。

## ソフトウェアスプライトの機能

### プライオリティ

ソフトウェアスプライトの描画優先度をソフトウェアスプライトを構成する四角ポリゴンのZ値で指定することが可能です。 四角ポリゴンの描画に正射投影を使用するため、正しく、深度テストを行うためには深度テストをZバッファモードに設定する必要があります。 ３Dオブジェクトと、ソフトウェアスプライトを併用する場合には、ユーザはお互いの描画が干渉しないように適切にそれぞれのZ値域を管理する必要があります。

### アルファブレンド

ソフトウェアスプライトのαブレンド機能では、スプライト1枚ごとに不透明度を変化させることが可能です。
また、3Dグラフィックスエンジンで、α値をゼロにしてポリゴン描画を行うと、ワイヤーフレーム描画が行われますが、 ライブラリ内部で、完全に透明なスプライト(α値がゼロ)を判定し、描画を行わないようにしています。

### カラーモジュレーション

ソフトウェアスプライトに、指定された単色を掛け合わせる事が可能です。

### ＵＶ値の設定

ソフトウェアスプライトは、テクスチャがマッピングされたポリゴンとして描画されますが、そのマッピングされているテクスチャのＵ，Ｖの値を変更する事が可能となっています。UV値はスプライト左上のUV値、右下のUV値の2点で指定するようになっています。

### 回転の中心の設定

ソフトウェアスプライトを回転させる場合、その回転の中心を指定することができます。回転の中心が設定されない場合は、ソフトウェアスプライトの中心を回転の中心とします。

### 上下左右のフリップ

ソフトウェアスプライトは、上下方向、左右方向に反転させて表示させる事が可能です。

## ソフトウェアスプライトの描画API

ソフトウェアスプライトを描画するAPIは大きく2種類に分類されます。
ひとつは、ライブラリの提供するデータ構造を利用して描画を行うAPI、
もうひとつはデータ構造を利用せずに直接関数引数にパラメータを指定して描画を実行するAPIです。

## API種類によるパフォーマンスの違いについて

`

    void NNS_G2dDrawSprite( s16 px, s16 py, int pz,
                            int sx, int sy,
                            int U0, int V0, int U1, int V1 );

` パラメータを指定して描画を実行するAPIは、UV値を設定して四角ポリゴンを描画するだけのシンプルな関数です。
高速に動作しますが、3D グラフィックスエンジンの各種設定をユーザが適切に行う必要があります。
`

    void NNS_G2dDrawSpriteSimple  ( const NNSG2dSimpleSprite* pS );
    void NNS_G2dDrawSpriteBasic   ( const NNSG2dBasicSprite* pB );
    void NNS_G2dDrawSpriteExtended( const NNSG2dExtendedSprite* pE );

` ライブラリのデータ構造を利用して描画を行うAPIは、3D グラフィックスエンジンの各種設定を関数内で実行します。
そのため、簡単に利用できますが処理負荷は直接パラメータを指定するAPIと比べて高くなっています。
サンプルデモの比較では、直接パラメータを指定するAPIは、データ構造を利用して描画を行うAPIと比べて 約40パーセントほど高速に動作します。
そのため、ゲームパフォーマンスに大きな影響を与える局面（大量のスプライトの描画など）では、直接パラメータを指定するAPI のご利用を推奨します。

## ソフトウェアスプライトのデータ構造

種類 | 指定できる機能 | 適用例
Simple Sprite | スプライトの位置、Ｚ軸回りの回転、プライオリティ、アルファブレンド | パーティクル等、同一テクスチャで位置、サイズのみが異なるスプライトの描画
Basic Sprite | Simple Spriteの全機能、テクスチャ指定、カラーモジュレーション | 標準的なスプライトの描画
Extended Sprite | Basic Spriteの全機能、ＵＶ値の設定、回転中心の設定、上下左右のフリップ | UVアニメーション等のエフェクトを含むスプライトの描画

ソフトウェアスプライトは、指定可能なパラメータの数により３種類のフォーマットを用意しています。
ソフトウェアスプライトは、内部的に全てExtended Spriteとして処理されています。
Simple Sprite及びBasic Spriteでは指定できない機能にはデフォルトの値を使用し、 これらについての演算コストを低減しています。
なお、デフォルトの値は、別に用意されるＡＰＩにより変更可能となっています。

## 参照

なし

## 履歴

2008/06/20 TWLの記述を追加
2007/11/26 アルファ値に関する説明を追加
2004/12/06 初版