# 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 calculation.
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 calculation.
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 calculation.
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 to be restored 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 calculation.
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 to be restored before calculation.

## Description

The `NNS_G3D_SBC_NODEDESC` command defines the parent / child relationship between nodes. By default, this command calls the `NNSi_G3dFuncSbc_NODEDESC` function found in `sbc.c`. This function internally performs the following processes:

1. Restores the `Position/Vector` matrix to the current matrix 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. Callbacks in this position are convenient when substituting the joint calculation to 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 `*pJntAnmResult` in response to whether the joint information is static image or animation.
5. Checks the timing `B` callback. Callbacks in this position are 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. Callbacks in this position are 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 insert 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

2004/10/14 Added description.
2004/08/02 Initial version.

CONFIDENTIAL