OAMSoftEmu_Overview

# OAMソフトウエアスプライト描画モジュール

## 説明

OAMをソフトウエアスプライトを使用して、簡単に描画できる機能を提供するモジュールです。

## OAMソフトウェアスプライト描画のメリット

OAMマネージャをソフトウェアスプライト表示用に使用する場合には、以下に示すようなメリットがあります。

### OAMと同じ使い勝手

2DグラフィックスエンジンのOAMを引数にとるＡＰＩが用意されていますので、TWLおよびNITROの３Ｄグラフィックスエンジンを意識することなく、ソフトウェアスプライトを用いた描画を行う事が出来ます。

### OAMの制限を回避

最大表示数、2倍以上の拡大表示制限などの制限が回避可能となります。

### UVパラメータのキャッシングによる高速な描画

OAMソフトウエアスプライト描画モジュールは通常、描画毎にOAMアトリビュートを解釈してUVパラメータの計算を行います。 OAMソフトウエアスプライト描画モジュールは、このUVパラメータ計算処理を、キャッシュして再計算を回避することで、高速に描画を行う機能を提供しています。

## OAMソフトウェアスプライト描画に関する注意事項

OAMソフトウエアスプライト描画モジュールでは、ソフトウェアスプライトを用いる場合においても、2DグラフィックスエンジンのOAMと同様の使い方ができるように設計されています。 しかし、2Dグラフィックスエンジンと３Ｄグラフィックスエンジンとのハードウェア機能の違いにより、完全な互換性を持たせることは出来ません。

### キャラクタデータの違い

2DグラフィックスエンジンのOBJ用のキャラクタデータと、ソフトウェアスプライトが使用するテキスチャデータとは、そのフォーマットとVRAM上での置き場所が異なります。その為、OBJ用のキャラクタデータとは別にソフトウェアスプライト用のキャラクタデータが必要となります。

### Affine行列のスケールの違い

2DグラフィックスエンジンのOBJに用いられるAffine行列のスケールは、ソフトウェアスプライト（ポリゴン）で用いられるAffine行列のスケールと異なった解釈を行います。OBJで２倍に拡大されるように設定した行列は、ソフトウェアスプライトでは２分の１に縮小するように機能します。

### Affine変換パラメータ番号指定

OAMアトリビュート内でAffine行列番号とフリップフラグは同じビット情報を共有利用しています。
通常、両者の区別は回転拡大縮小イネーブルフラグの状態から行います。
しかし、ソフトウエアスプライト描画ならではの機能(例：アフィン変換したOBJをフリップ描画する)を実現するために、 本モジュールでは、回転拡大縮小イネーブルフラグの判定を行いません。
そのため、Affine変換パラメータ番号に8以上の値を設定した場合、
パラメータ番号がフリップフラグと誤認されてしまいます。
本モジュールを単体で利用する場合には、Affine変換パラメータ番号を指定する必要はないため問題にはなりませんが、 OAMマネージャのソフトウェアスプライト描画機能を利用される場合には、注意が必要となります。

### アルファ値の扱い

本モジュールは、３Ｄグラフィックスエンジンのアルファ値の状態を制御しません。
３Ｄグラフィックスエンジンは、アルファ値をゼロに指定した場合、ポリゴンをワイヤーフレームで描画します。
そのため、場合によっては、描画自体を行わない等の処理をユーザコードに記述する必要があります。

### モザイク機能

2DグラフィックスエンジンのOBJでは、OBJ単位でモザイク機能のオンとオフが設定できますが、ソフトウェアスプライトでは、ソフトウェアスプライト全体でしかモザイク機能のオンとオフが設定できません。

### BGとの優先順位

2DグラフィックスエンジンのOBJでは、OBJ単位でBGとの優先順位が設定できますが、ソフトウェアスプライトでは、ソフトウェアスプライト全体でしか優先順位を指定できません。

### フリップ機能を利用した場合のテクスチャサンプリング位置の補正

OAMソフトウエアスプライト描画モジュールはUV値補正関数を登録できるようになっています。 TWLおよびNITROの３Dグラフィックスエンジンはテクスチャサンプリング位置がLCD画素方向に対して、固定されているため、UVの増加方向が画素方向にたいして異なる場合、サンプリング位置がずれてしまいます。OAMソフトウエアスプライト描画モジュールではフリップ機能を利用したOBJの描画をUV値を反転することで再現しています。UV値を反転することで、UVの増加方向が逆転するのでUV値を補正する必要があります。 なお、アフィン変換を使用した際もUV値の増加方向が画素方向とずれ補正処理が必要です。しかし、この場合、補正計算の計算負荷が高くなることが予想され、素材側での対処が現実的であるとの判断からG2Dは補正手段をサポートしません。

## 参照

なし

## 履歴

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