# NNS_G3D_SBC_NODEDESC

## 命令のフォーマット

オフセット（バイト単位） | 説明（`NNS_G3D_SBCFLG_000の場合）`
--- | ---
0 | `NNS_G3D_SBC_NODEDESC | NNS_G3D_SBCFLAG_000`
1 | 計算対象ノードのノードID
2 | 計算対象ノードの親ノードのノードID
3 | フラグ(NNSG3dSbcNodeDescFlag)

オフセット（バイト単位） | 説明（`NNS_G3D_SBCFLG_001の場合）`
--- | ---
0 | `NNS_G3D_SBC_NODEDESC | NNS_G3D_SBCFLAG_001`
1 | 計算対象ノードのノードID
2 | 計算対象ノードの親ノードのノードID
3 | フラグ(NNSG3dSbcNodeDescFlag)
4 | 計算結果がストアされる行列スタックＩＤ

オフセット（バイト単位） | 説明（`NNS_G3D_SBCFLG_010の場合）`
--- | ---
0 | `NNS_G3D_SBC_NODEDESC | NNS_G3D_SBCFLAG_010`
1 | 計算対象ノードのノードID
2 | 計算対象ノードの親ノードのノードID
3 | フラグ(NNSG3dSbcNodeDescFlag)
4 | 計算前にリストアされる行列スタックID

オフセット（バイト単位） | 説明（`NNS_G3D_SBCFLG_011の場合）`
--- | ---
0 | `NNS_G3D_SBC_NODEDESC | NNS_G3D_SBCFLAG_011`
1 | 計算対象ノードのノードID
2 | 計算対象ノードの親ノードのノードID
3 | フラグ(NNSG3dSbcNodeDescFlag)
4 | 計算結果がストアされる行列スタックＩＤ
5 | 計算前にリストアされる行列スタックID

## 説明

`NNS_G3D_SBC_NODEDESC`命令は、ノード間の親子関係を定義するための命令です。この命令は、デフォルトではsbc.cの`NNSi_G3dFuncSbc_NODEDESC`関数をコールします。関数の内部では以下のような処理が行われています。

1. 命令のバリエーションによっては、Position/Vector行列を行列スタックからカレント行列にリストアします。
2. `NNS_G3dRS`構造体の`pJntAnmResult`メンバに`NNSG3dJntAnmResult`のポインタをセットする。
3. タイミングＡのコールバックをチェックします。この位置のコールバックは、ジョイントの計算をコールバック関数に代行させたい場合に便利です。なお、コールバック関数内でNNS_G3dRSの`NNS_G3D_RSFLAG_SKIP`フラグをセットしておくと、次のコールバックまでの処理をスキップします。
4. ジョイントの情報が静止画／アニメーションの場合に応じて、`*pJntAnmResult`にセットされます。
5. タイミングBのコールバックをチェックします。この位置のコールバックはジョイントの計算結果をコールバック関数に加工させたい場合に便利です。
6. ジョイント行列がジオメトリエンジンに送信されます。
7. タイミングCのコールバックをチェックします。この位置のコールバックは、この命令の終了後に何らかの動作をさせたい場合に利用します。
8. 命令のバリエーションによっては、Position/Vector行列をカレント行列から行列スタックにストアします。

コールバック関数の呼び出しタイミング | 用途
--- | ---
`NNS_G3D_SBC_CALLBACK_TIMING_A` | NNSG3dJntAnmResult構造体の計算をユーザープログラムに代行させたい場合。
`NNS_G3D_SBC_CALLBACK_TIMING_B` | NNSG3dJntAnmResult構造体の計算結果をユーザープログラムで加工したい場合。
`NNS_G3D_SBC_CALLBACK_TIMING_C` | この命令の終了後に何らかの処理を入れたい場合。

オプションフラグ | 動作
--- | ---
`NNS_G3D_SBCFLG_000` | カレント行列に対して計算を行う。計算結果は行列スタックにストアしない。
`NNS_G3D_SBCFLG_001` | カレント行列に対して計算を行なう。その後計算結果を行列スタックにストアする。
`NNS_G3D_SBCFLG_010` | 行列スタックからリストアしてから計算を行う。計算結果は行列スタックにストアしない。
`NNS_G3D_SBCFLG_011` | 行列スタックからリストアしてから計算を行う。その後計算結果を行列スタックにストアする。

## 参照

## 履歴

2004/10/14 記述の追加
2004/08/02 初版