public void Assign(AppMain.GMS_BS_CMN_CNM_NODE_INFO p) { this.node_w_mtx.Assign(p.node_w_mtx); this.node_index = p.node_index; this.enable = p.enable; this.mode = p.mode; this.flag = p.flag; }
private static void GmBsCmnSetCNMMtx( AppMain.GMS_BS_CMN_CNM_MGR_WORK cnm_mgr_work, AppMain.NNS_MATRIX w_mtx, int cnm_reg_id, int enables) { AppMain.GMS_BS_CMN_CNM_NODE_INFO nodeInfo = cnm_mgr_work.node_info_list[cnm_reg_id]; AppMain.nnCopyMatrix(nodeInfo.node_w_mtx, w_mtx); if (enables == 0) { return; } nodeInfo.enable = 1; }
private static void gmBsCmnMtxpltCallbackControlNodeMatrix( AppMain.NNS_MATRIX[] mtx_plt, AppMain.NNS_OBJECT _object, object mplt_cb_param) { if (mplt_cb_param == null) { return; } ushort regNodeCnt = ((AppMain.OBS_ACTION3D_NN_WORK.CMPLT_Wrapper)mplt_cb_param).reg_node_cnt; AppMain.GMS_BS_CMN_CNM_NODE_INFO[] pInfos = ((AppMain.OBS_ACTION3D_NN_WORK.CMPLT_Wrapper)mplt_cb_param).m_pInfos; AppMain.NNS_MATRIX[] mtx_plt1 = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_orig_mtx_plt; if (mtx_plt1 == null || mtx_plt1.Length < _object.nMtxPal) { mtx_plt1 = new AppMain.NNS_MATRIX[_object.nMtxPal]; for (int index = 0; index < _object.nMtxPal; ++index) { mtx_plt1[index] = AppMain.amDrawAlloc_NNS_MATRIX(); } } for (int index = 0; index < _object.nMtxPal; ++index) { mtx_plt1[index].Assign(mtx_plt[index]); } for (int index = 0; index < (int)regNodeCnt; ++index) { AppMain.GMS_BS_CMN_CNM_NODE_INFO bsCmnCnmNodeInfo = pInfos[index]; if (bsCmnCnmNodeInfo.enable != 0) { int iMatrix = (int)_object.pNodeList[bsCmnCnmNodeInfo.node_index].iMatrix; if (iMatrix != -1) { AppMain.NNS_MATRIX matrixCandidateMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_candidate_mtx; AppMain.NNS_MATRIX matrixInvViewMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_inv_view_mtx; AppMain.NNS_MATRIX nodeMatrixNodeWMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_node_w_mtx; AppMain.nnInvertMatrix(matrixInvViewMtx, AppMain.amDrawGetWorldViewMatrix()); AppMain.nnMultiplyMatrix(matrixCandidateMtx, matrixInvViewMtx, mtx_plt[iMatrix]); if (((int)bsCmnCnmNodeInfo.flag & (int)AppMain.GMD_BS_CMN_CNM_FLAG_LOCAL_COORDINATE) != 0) { AppMain.NNS_MATRIX nodeMatrixCurMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_cur_mtx; AppMain.NNS_MATRIX nodeMatrixInvCurMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_inv_cur_mtx; AppMain.NNS_MATRIX nodeMatrixInitMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_init_mtx; int iParent = (int)_object.pNodeList[bsCmnCnmNodeInfo.node_index].iParent; AppMain.nnInvertMatrix(nodeMatrixInitMtx, _object.pNodeList[bsCmnCnmNodeInfo.node_index].InvInitMtx); if (bsCmnCnmNodeInfo.mode == 0U) { AppMain.NNS_MATRIX nodeMatrixParentMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_parent_mtx; AppMain.NNS_MATRIX nodeMatrixDiffMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_diff_mtx; AppMain.NNS_MATRIX matrixParentInitMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_parent_init_mtx; AppMain.nnMultiplyMatrix(nodeMatrixParentMtx, matrixInvViewMtx, mtx_plt[(int)_object.pNodeList[iParent].iMatrix]); AppMain.nnInvertMatrix(matrixParentInitMtx, _object.pNodeList[iParent].InvInitMtx); AppMain.nnMultiplyMatrix(nodeMatrixParentMtx, nodeMatrixParentMtx, matrixParentInitMtx); AppMain.nnMultiplyMatrix(nodeMatrixDiffMtx, _object.pNodeList[iParent].InvInitMtx, nodeMatrixInitMtx); AppMain.nnMultiplyMatrix(nodeMatrixCurMtx, nodeMatrixParentMtx, nodeMatrixDiffMtx); AppMain.nnMultiplyMatrix(matrixCandidateMtx, nodeMatrixCurMtx, _object.pNodeList[bsCmnCnmNodeInfo.node_index].InvInitMtx); AppMain.nnMultiplyMatrix(nodeMatrixNodeWMtx, nodeMatrixCurMtx, bsCmnCnmNodeInfo.node_w_mtx); } else { AppMain.NNS_MATRIX matrixParentCurMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_parent_cur_mtx; AppMain.NNS_MATRIX invParentOrigMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_inv_parent_orig_mtx; AppMain.nnCopyMatrix(nodeMatrixCurMtx, matrixCandidateMtx); AppMain.nnMultiplyMatrix(nodeMatrixCurMtx, nodeMatrixCurMtx, nodeMatrixInitMtx); AppMain.gmBsCmnGetNodeInvWorldMtx(invParentOrigMtx, _object.pNodeList[iParent], matrixInvViewMtx, mtx_plt1); AppMain.gmBsCmnGetNodeWorldMtx(matrixParentCurMtx, _object.pNodeList[iParent], matrixInvViewMtx, mtx_plt); AppMain.nnInvertMatrix(nodeMatrixInvCurMtx, nodeMatrixCurMtx); AppMain.nnMultiplyMatrix(nodeMatrixNodeWMtx, bsCmnCnmNodeInfo.node_w_mtx, nodeMatrixInvCurMtx); AppMain.nnMultiplyMatrix(nodeMatrixNodeWMtx, nodeMatrixCurMtx, nodeMatrixNodeWMtx); AppMain.nnMultiplyMatrix(nodeMatrixNodeWMtx, invParentOrigMtx, nodeMatrixNodeWMtx); AppMain.nnMultiplyMatrix(nodeMatrixNodeWMtx, matrixParentCurMtx, nodeMatrixNodeWMtx); } } else { AppMain.nnCopyMatrix(nodeMatrixNodeWMtx, bsCmnCnmNodeInfo.node_w_mtx); } if (bsCmnCnmNodeInfo.mode == 1U) { AppMain.nnMultiplyMatrix(matrixCandidateMtx, nodeMatrixNodeWMtx, matrixCandidateMtx); } else if (bsCmnCnmNodeInfo.mode == 2U) { AppMain.NNS_MATRIX nodeMatrixInitMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_init_mtx; AppMain.nnInvertMatrix(nodeMatrixInitMtx, _object.pNodeList[bsCmnCnmNodeInfo.node_index].InvInitMtx); AppMain.nnMultiplyMatrix(matrixCandidateMtx, matrixCandidateMtx, nodeMatrixInitMtx); AppMain.nnMultiplyMatrix(matrixCandidateMtx, matrixCandidateMtx, nodeMatrixNodeWMtx); } else if (((int)bsCmnCnmNodeInfo.flag & (int)AppMain.GMD_BS_CMN_CNM_FLAG_INHERIT_SCALE) != 0 && ((int)bsCmnCnmNodeInfo.flag & (int)AppMain.GMD_BS_CMN_CNM_FLAG_LOCAL_COORDINATE) == 0) { AppMain.NNS_MATRIX nodeMatrixInitMtx = AppMain.gmBsCmnMtxpltCallbackControlNodeMatrix_init_mtx; AppMain.nnInvertMatrix(nodeMatrixInitMtx, _object.pNodeList[bsCmnCnmNodeInfo.node_index].InvInitMtx); AppMain.nnMultiplyMatrix(matrixCandidateMtx, matrixCandidateMtx, nodeMatrixInitMtx); AppMain.AkMathExtractScaleMtx(matrixCandidateMtx, matrixCandidateMtx); AppMain.nnMultiplyMatrix(matrixCandidateMtx, nodeMatrixNodeWMtx, matrixCandidateMtx); } else { AppMain.nnCopyMatrix(matrixCandidateMtx, nodeMatrixNodeWMtx); } if (bsCmnCnmNodeInfo.mode != 1U) { AppMain.nnMultiplyMatrix(matrixCandidateMtx, matrixCandidateMtx, _object.pNodeList[bsCmnCnmNodeInfo.node_index].InvInitMtx); } AppMain.nnMultiplyMatrix(mtx_plt[iMatrix], AppMain.amDrawGetWorldViewMatrix(), matrixCandidateMtx); } } } }