示例#1
0
 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;
 }
示例#2
0
 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;
 }
示例#3
0
    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);
                }
            }
        }
    }