OAMソフトウエアスプライト描画モジュール
説明
OAMをソフトウエアスプライトを使用して、簡単に描画できる機能を提供するモジュールです。
OAMソフトウェアスプライト描画のメリット
OAMマネージャをソフトウェアスプライト表示用に使用する場合には、以下に示すようなメリットがあります。
OAMと同じ使い勝手
2DグラフィックスエンジンのOAMを引数にとるAPIが用意されていますので、NITROの3Dグラフィックスエンジンを意識することなく、ソフトウェアスプライトを用いた描画を行う事が出来ます。
OAMの制限を回避
最大表示数、2倍以上の拡大表示制限などの制限が回避可能となります。
UVパラメータのキャッシングによる高速な描画
OAMソフトウエアスプライト描画モジュールは通常、描画毎にOAMアトリビュートを解釈してUVパラメータの計算を行います。
OAMソフトウエアスプライト描画モジュールは、このUVパラメータ計算処理を、キャッシュして再計算を回避することで、高速に描画を行う機能を提供しています。
OAMソフトウェアスプライト描画に関する注意事項
OAMソフトウエアスプライト描画モジュールでは、ソフトウェアスプライトを用いる場合においても、2DグラフィックスエンジンのOAMと同様の使い方ができるように設計されています。
しかし、2Dグラフィックスエンジンと3Dグラフィックスエンジンとのハードウェア機能の違いにより、完全な互換性を持たせることは出来ません。
キャラクタデータの違い
2DグラフィックスエンジンのOBJ用のキャラクタデータと、ソフトウェアスプライトが使用するテキスチャデータとは、そのフォーマットとVRAM上での置き場所が異なります。その為、OBJ用のキャラクタデータとは別にソフトウェアスプライト用のキャラクタデータが必要となります。
Affine行列のスケールの違い
2DグラフィックスエンジンのOBJに用いられるAffine行列のスケールは、ソフトウェアスプライト(ポリゴン)で用いられるAffine行列のスケールと異なった解釈を行います。OBJで2倍に拡大されるように設定した行列は、ソフトウェアスプライトでは2分の1に縮小するように機能します。
Affine変換パラメータ番号指定
OAMアトリビュート内でAffine行列番号とフリップフラグは同じビット情報を共有利用しています。
通常、両者の区別は回転拡大縮小イネーブルフラグの状態から行います。
しかし、ソフトウエアスプライト描画ならではの機能(例:アフィン変換したOBJをフリップ描画する)を実現するために、
本モジュールでは、回転拡大縮小イネーブルフラグの判定を行いません。
そのため、Affine変換パラメータ番号に8以上の値を設定した場合、
パラメータ番号がフリップフラグと誤認されてしまいます。
本モジュールを単体で利用する場合には、Affine変換パラメータ番号を指定する必要はないため問題にはなりませんが、
OAMマネージャのソフトウェアスプライト描画機能を利用される場合には、注意が必要となります。
アルファ値の扱い
本モジュールは、3Dグラフィックスエンジンのアルファ値の状態を制御しません。
3Dグラフィックスエンジンは、アルファ値をゼロに指定した場合、ポリゴンをワイヤーフレームで描画します。
そのため、場合によっては、描画自体を行わない等の処理をユーザコードに記述する必要があります。
モザイク機能
2DグラフィックスエンジンのOBJでは、OBJ単位でモザイク機能のオンとオフが設定できますが、ソフトウェアスプライトでは、ソフトウェアスプライト全体でしかモザイク機能のオンとオフが設定できません。
BGとの優先順位
2DグラフィックスエンジンのOBJでは、OBJ単位でBGとの優先順位が設定できますが、ソフトウェアスプライトでは、ソフトウェアスプライト全体でしか優先順位を指定できません。
フリップ機能を利用した場合のテクスチャサンプリング位置の補正
OAMソフトウエアスプライト描画モジュールはUV値補正関数を登録できるようになっています。
NITROの3Dグラフィックスエンジンはテクスチャサンプリング位置がLCD画素方向に対して、固定されているため、UVの増加方向が画素方向にたいして異なる場合、サンプリング位置がずれてしまいます。OAMソフトウエアスプライト描画モジュールではフリップ機能を利用したOBJの描画をUV値を反転することで再現しています。UV値を反転することで、UVの増加方向が逆転するのでUV値を補正する必要があります。
なお、アフィン変換を使用した際もUV値の増加方向が画素方向とずれ補正処理が必要です。しかし、この場合、補正計算の計算負荷が高くなることが予想され、素材側での対処が現実的であるとの判断からG2Dは補正手段をサポートしません。
参照
なし
履歴
2007/11/26 アルファ値に関する説明を追加
2004/12/06 初版