# NNS_G3D_SBC_NODEDESC

## Command Format

Offset (bytes) | Description for `NNS_G3D_SBCFLG_000`
--- | ---
0 | `NNS_G3D_SBC_NODEDESC | NNS_G3D_SBCFLG_000`
1 | The node ID of a node that is targeted for transformation.
2 | The node ID of the parent node of the node that is targeted for calculation.
3 | Flag (`NNSG3dSbcNodeDescFlag`)

Offset (bytes) | Description for `NNS_G3D_SBCFLG_001`.
--- | ---
0 | `NNS_G3D_SBC_NODEDESC | NNS_G3D_SBCFLG_001`
1 | The node ID of a node that is targeted for transformation.
2 | The node ID of the parent node of the node that is targeted for calculation.
3 | Flag (`NNSG3dSbcNodeDescFlag`).
4 | The matrix stack ID where the calculation results are stored.

Offset (bytes) | Description for `NNS_G3D_SBCFLG_010`.
--- | ---
0 | `NNS_G3D_SBC_NODEDESC | NNS_G3D_SBCFLG_010`
1 | The node ID of a node that is targeted for transformation.
2 | The node ID of the parent node of the node that is targeted for calculation.
3 | Flag (`NNSG3dSbcNodeDescFlag`).
4 | The ID of the matrix stack from which restoration is done before calculation.

Offset (bytes) | Description for `NNS_G3D_SBCFLG_011`.
--- | ---
0 | `NNS_G3D_SBC_NODEDESC | NNS_G3D_SBCFLG_011`
1 | The node ID of a node that is targeted for transformation.
2 | The node ID of the parent node of the node that is targeted for calculation.
3 | Flag (`NNSG3dSbcNodeDescFlag`).
4 | The matrix stack ID where the calculation results are stored.
5 | The ID of the matrix stack from which restoration is done before calculation.

## Description

The `NNS_G3D_SBC_NODEDESC` command defines the parent / child relationship between nodes. By default, this command calls the `sbc.c` `NNSi_G3dFuncSbc_NODEDESC` function. The following processes are performed inside this function:

1. Restores the `position` / `vector` matrix to the current matrix stack from the matrix stack (depending on command variations).
2. Sets the `NNSG3dJntAnmResult` pointer to the `pJntAnmResult` member in the `NNS_G3dRS` structure.
3. Checks the timing `A` callback. The callback in this position is convenient when substituting the joint calculation in the callback function. You can skip processing until the next callback by setting the `NNS_G3D_RSFLAG_SKIP` flag of `NNS_G3dRS` in the callback function.
4. Sets the joint information in `*pMatAnmResult` when the joint information is static image / animation.
5. Checks the timing `B` callback. The callback in this position is convenient when processing the results of the joint calculation in the callback function.
6. Sends the joint matrix to the geometry engine.
7. Checks the timing `C` callback. The callback in this position is used when performing some sort of operation after this command finishes.
8. Stores the `position` / `vector` matrix from the current matrix to the matrix stack (depending on command variations).

Timing for Calling a Callback Function | Usage
--- | ---
`NNS_G3D_SBC_CALLBACK_TIMING_A` | When you want a user program to calculate the `NNSG3dJntAnmResult` structure.
`NNS_G3D_SBC_CALLBACK_TIMING_B` | When you want to manipulate the results of calculations on the `NNSG3dJntAnmResult` structure in a user program.
`NNS_G3D_SBC_CALLBACK_TIMING_C` | When you want to enter some process after this command ends.

Option Flag | Operation
--- | ---
`NNS_G3D_SBCFLG_000` | Performs calculation on the current matrix. Does not store calculation results in the matrix stack.
`NNS_G3D_SBCFLG_001` | Performs calculation on the current matrix. Then stores calculation results in the matrix stack.
`NNS_G3D_SBCFLG_010` | Restores from the matrix stack and then calculates. Does not store calculation results in the matrix stack.
`NNS_G3D_SBCFLG_011` | Restores from the matrix stack and then calculates. Then stores calculation results in the matrix stack.

## See Also

## Revision History

10/14/2004 Revised description.

08/02/2004 Initial version.