武器悬挂系统

武器悬挂系统,其实就是读取骨骼节点的变换矩阵, 把它作为武器的变换矩阵.
当然武器上各点的坐标是相对于节点的坐标,所以在导出前,应该看看要悬挂的部位的本地坐标系是怎样的,例如,手掌面向的一面是那个轴,拇指在那个轴,那么导出前应该把武器调整到挂上去正好是手握武器的状态.
以下是读取骨骼节点变换矩阵的函数:

    LRESULT GetFrameMatrix(LPD3DXFRAME pFrameBase,  char   * strFrameName,D3DMATRIX  * pMat)
    
{
        D3DXFRAME 
*pFrame ;

        
if(pFrameBase!=NULL)
            pFrame 
= pFrameBase;
        
else 
            pFrame 
= m_pFrameRoot;
      
        
if(pFrame->Name!=NULL && 0==strcmp(pFrame->Name,strFrameName))
        
{
            
*pMat=((D3DXFRAME_DERIVED*)pFrame)->CombinedTransformationMatrix; 
            
return S_OK;
        }

        
if (pFrame->pFrameSibling != NULL)
        
{
            
if(S_OK==    GetFrameMatrix(pFrame->pFrameSibling,strFrameName,pMat))
                
return S_OK;
        }

        
if (pFrame->pFrameFirstChild != NULL)
        
{
            
if(S_OK==    GetFrameMatrix(pFrame->pFrameFirstChild,strFrameName,pMat))
                
return S_OK;
        }

        
return E_FAIL;
    }

你可能感兴趣的:(系统)