ダイナミックポリゴンによるパターンの切り替え
MascotCapsule V3 では モデルデータ内にいくつかの状態を持つことができ、その状態を指定してモデルを描画することが可能です。
モデルの状態の指定には OEMC_Micro3D_Figure_setPattern( Figure* This, hi_sint32 pattern ) を使用します。
モデルデータがどれだけの状態を持っているかはデータ作成時に設定されます。この数は OEMC_Micro3D_Figure_getNumPatterns( Figure* This ) を利用することで取得することができます。
モデルの状態はベースとなる共通セットを含めると最大で 33 個の状態があります。これを 32bit の各 bit とみなして(共通セットを 0 とします) OEMC_Micro3D_Figure_setPattern() に指定します。
今回使用するサンプルの場合、共通セットを含め以下の 4 つの外見状態を持っています。
- Pattern 0 : 共通セットとなる顔
- Pattern 1 : 目のない顔
- Pattern 2 : 開いた目
- Pattern 3 : 閉じた目
そのため、
- OEMC_Micro3D_Figure_setPattern( figure, 0 ) で、共通セットとなる顔
- OEMC_Micro3D_Figure_setPattern( figure, ( 1 << 0 ) ) で、目のない顔
- OEMC_Micro3D_Figure_setPattern( figure, ( 1 << 1 ) ) で、閉じた目を持つ顔
- OEMC_Micro3D_Figure_setPattern( figure, ( 1 << 2 ) ) で、閉じた目を持つ顔
といった描画がなされます。
Sample_Dynamic 実行画面(左から、Pattern 0, Pattern 1, Pattern 2)
また、複数の独立した外見状態を持つモデルの場合、
OEMC_Micro3D_Figure_setPattern( figure, ( ( 1 << 1 ) | ( 1 << 5 ) ) )
といった指定を行うと、同時に複数の箇所を動かすことも可能です。
* cap.figpat は現在のモデル状態
* cap.fig はモデルデータ
*/
int maxpat = OEMC_Micro3D_Figure_getNumPatterns( &cap.fig );
if ( cap.figPattern >= maxpat )
/* モデルの状態を設定 */
OEMC_Micro3D_Figure_setPattern( &cap.fig, ( 1 << cap.figPattern ) );
/* モデルの外見を変更 */
cap.figPattern++;
なお、これらの関数を使用して描画を行うときは、通常 ActTable を使用したアニメーションを行わないときです。OEMC_Micro3D_Figure_setPosture() を呼び出した後、OEMC_Micro3D_Figure_setPattern() を呼び出すと、OEMC_Micro3D_Figure_setPosture() での設定は無視されます。

