怡春院av_国产精品久久久久久亚洲毛片_精品国产乱码一区二区三区_亚洲一区欧美日韩_亚洲黄色激情视频_国产全黄a一级毛片91_亚洲免费在线播放

maya履帶動畫綁定插件代碼,需要來取

2022-03-07
10448
1

下面的maya履帶動畫 api源碼,需要大家自己在vs里編譯。

 

 

  
  
    //首先是頭文件代碼:
    
    //頭文件名稱:glideDeformer.h
    
     
    
    #ifndef glideDeformer_h
    #define glideDeformer_h
    
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    
    class glideDeformer:public MPxDeformerNode
    {
    public:
        glideDeformer(){};
    
        virtual
    ~glideDeformer(){};
    
        static
    void * creator(){return new glideDeformer;};
        static
    MStatus initializeAttr();
    
        virtual
    MStatus  deform(MDataBlock
    &block, MItGeometry &iter, const MMatrix &mat, unsigned
    int multiIndex);
    
        bool
    getClosestUVParam(MPoint & point,MFnNurbsSurface &
    surfaceFn,MObject surfaceData,double & paramU,double &
    paramV);
        bool
    getPointFroamSurfacePoint(MPoint & point,MFnNurbsSurface
    & surfaceFn,MObject surfaceData,double & paramU,double
    & paramV,MPoint & outPoint);
        bool
    getPointAfterDeformed(MPoint &
    pointInSurfaceMatrix,MFnNurbsSurface & surfaceFn,MObject
    surfaceData,double & paramU,double & paramV,MPoint &
    pointAffterDeformed);
    
        static
    MString nodeName;
        static
    MTypeId nodeId;
    
        static
    MObject glide;
        static
    MObject fixedBase;
        static
    MObject aimDirection;
        static
    MObject drivenSurface;
        static
    MObject baseSurface;
    };
    #endif
    
     
    
    //CPP文件
    
    #include "glideDeformer.h"
    
    MString glideDeformer::nodeName=MString("glideDeformer");
    MTypeId glideDeformer::nodeId=MTypeId(0x87031);
    
    MObject glideDeformer::glide;
    MObject glideDeformer::fixedBase;
    MObject glideDeformer::aimDirection;
    MObject glideDeformer::drivenSurface;
    MObject glideDeformer::baseSurface;
    
    using std::cout;
    using std::endl;
    
    MStatus glideDeformer::initializeAttr()
    {
        MFnNumericAttribute
    numattr;
        MFnTypedAttribute
    typedattr;
        MFnEnumAttribute
    enumattr;
    
        glide=numattr.create("glide","gld",MFnNumericData::kFloat,0.0);
    
        numattr.setKeyable(true);
    
        numattr.setStorable(true);
    
        fixedBase=numattr.create("fixedBase","fxb",MFnNumericData::kBoolean,0);
    
        numattr.setKeyable(true);
    
        numattr.setStorable(true);
    
        aimDirection=enumattr.create("aimDirection","adr",0);
    
        enumattr.addField("directionU",0);
    
        enumattr.addField("directionV",1);
    
        enumattr.setKeyable(true);
    
        enumattr.setStorable(true);
    
          drivenSurface=typedattr.create("drivenSurface","dsf",MFnData::kNurbsSurface);
    
        typedattr.setStorable(false);
    
          baseSurface=typedattr.create("baseSurface","bsf",MFnData::kNurbsSurface);
    
        typedattr.setStorable(false);
    
        //addAttribtue
    
        addAttribute(glide);
    
        addAttribute(fixedBase);
    
        addAttribute(drivenSurface);
    
        addAttribute(baseSurface);
    
        addAttribute(aimDirection);
    
        attributeAffects(glide,outputGeom);
    
        attributeAffects(fixedBase,outputGeom);
    
        attributeAffects(aimDirection,outputGeom);
    
        attributeAffects(drivenSurface,outputGeom);
    
        attributeAffects(baseSurface,outputGeom);
    
        return
    MS::kSuccess;
    };
    
    
    bool glideDeformer::getClosestUVParam(MPoint &
    point,MFnNurbsSurface & surfaceFn,MObject surfaceData,double
    & paramU,double & paramV)
    {
        surfaceFn.setObject(surfaceData);
    
        MPoint
    tmpPoint=surfaceFn.closestPoint(point,0,0,false,0.001,MSpace::kWorld);
    
        MStatus
      stat=surfaceFn.getParamAtPoint(tmpPoint,paramU,paramV,true,MSpace::kWorld,0.001);
    
        return
    true;
    };
    
    
    bool glideDeformer::getPointFroamSurfacePoint(MPoint &
    point,MFnNurbsSurface & surfaceFn,MObject surfaceData,double
    & paramU,double & paramV,MPoint & outPoint)
    {
        surfaceFn.setObject(surfaceData);
    
        MVector
    tangentU;
        MVector
    tangentV;
        MVector
    normal;
        MPoint
    surfacePoint;
        surfaceFn.getPointAtParam(paramU,paramV,surfacePoint,MSpace::kWorld);
    
          normal=surfaceFn.normal(paramU,paramV,MSpace::kWorld);
    
        surfaceFn.getTangents(paramU,paramV,tangentU,tangentV,MSpace::kWorld);
    
        tangentU.normalize();
    
        tangentV.normalize();
    
        normal.normalize();
    
        double
      matrix[4][4]={{tangentU.x,tangentU.y,tangentU.z,0.0},{normal.x,normal.y,normal.z,0.0},{tangentV.x,tangentV.y,tangentV.z,0.0},{surfacePoint.x,surfacePoint.y,surfacePoint.z,1.0}};
    
        MMatrix
    surfacePointMatrix=MMatrix(matrix);
          //cout<<"baseSurfacePointMatrix:"<<surfacepointmatrix<<endl;
     
       
    
        outPoint=point*surfacePointMatrix.inverse();
    
          //cout<<"pointInSurfaceMatrixPosition:"<<outpoint<<endl;
     
        return
    true;
    };
    
    
    bool glideDeformer::getPointAfterDeformed(MPoint &
    pointInSurfaceMatrix,MFnNurbsSurface & surfaceFn,MObject
    surfaceData,double & paramU,double & paramV,MPoint &
    pointAffterDeformed)
    {
        surfaceFn.setObject(surfaceData);
    
        MVector
    tangentU;
        MVector
    tangentV;
        MVector
    normal;
        MPoint
    surfacePoint;
    
          surfaceFn.getPointAtParam(paramU,paramV,surfacePoint,MSpace::kWorld);
    
          normal=surfaceFn.normal(paramU,paramV,MSpace::kWorld);
    
        surfaceFn.getTangents(paramU,paramV,tangentU,tangentV,MSpace::kWorld);
    
        tangentU.normalize();
    
        tangentV.normalize();
    
        normal.normalize();
    
        double
      matrix[4][4]={{tangentU.x,tangentU.y,tangentU.z,0.0},{normal.x,normal.y,normal.z,0.0},{tangentV.x,tangentV.y,tangentV.z,0.0},{surfacePoint.x,surfacePoint.y,surfacePoint.z,1.0}};
    
        MMatrix
    surfacePointMatrix=MMatrix(matrix);
          //cout<<"drivenSurfacePointMatrix:"<<surfacepointmatrix<<endl;
     
        pointAffterDeformed=pointInSurfaceMatrix*surfacePointMatrix;
    
          //cout<<"pointAffterDeformedPosition:"<<pointaffterdeformed<<endl;
     
        return
    true;
    };
    
    
    MStatus  glideDeformer::deform(MDataBlock
    &block, MItGeometry & iter, const MMatrix &mat,
    unsigned int multiIndex)
    {
          //cout<<"deform()方法調用..."<<endl;
     
        MDataHandle
    envelopehandle=block.inputValue(envelope);
        MDataHandle
    glidehandle=block.inputValue(glide);
        MDataHandle
    fixedBasehandle=block.inputValue(fixedBase);
    MDataHandle
    aimDirectionhandle=block.inputValue(aimDirection);
       
    
        float
    envelopevalue=envelopehandle.asFloat();
        float
    glidevalue=glidehandle.asFloat();
        short
    aimDirectionvalue=aimDirectionhandle.asShort();
        bool
    fixedBasevalue=fixedBasehandle.asBool();
    
        if
    (envelopevalue==0.0)
        {
    
              //cout<<"envelope值為0,跳過deform方法..."<<endl;
     
            return
    MS::kSuccess;
        };
    
        MDataHandle
    drivenSurfacehandle=block.inputValue(drivenSurface);
        MDataHandle
    baseSurfacehandle=block.inputValue(baseSurface);
    
    
        MFnNurbsSurfaceData
    surfaceDataFn;
        MFnNurbsSurface
    surfaceFn;
    
        MObject
    drivenSurfaceData=drivenSurfacehandle.asNurbsSurface();
        MObject
    baseSurfaceData=baseSurfacehandle.asNurbsSurface();
    
        MObject
    drivenSurfaceObj=surfaceDataFn.create();
        MObject
    baseSurfaceObj=surfaceDataFn.create();
    
        surfaceFn.setObject(drivenSurfaceData);
    
        surfaceFn.copy(drivenSurfaceObj);
    
        int
    drivenSurfaceCvU=surfaceFn.numCVsInU();
        int
    drivenSurfaceCvV=surfaceFn.numCVsInV();
       
    
        surfaceFn.setObject(baseSurfaceData);
    
        surfaceFn.copy(baseSurfaceObj);
    
        int
    baseSurfaceCvU=surfaceFn.numCVsInU();
        int
    baseSurfaceCvV=surfaceFn.numCVsInV();
    
        cout<<drivensurfacecvu<<"  "<<drivensurfacecvv<<"  "<<basesurfacecvu<<"  "<<basesurfacecvv<<" "<<endl;
     
        if
    (drivenSurfaceCvU==0||drivenSurfaceCvV==0||drivenSurfaceCvU==0||baseSurfaceCvU==0||baseSurfaceCvV==0)
    
        {
    
              //cout<<"drivenSurface或baseSurface不正確,變形不產生..."<<endl;
     
              MGlobal::displayWarning("drivenSurface或baseSurface不正確,變形不產生...");
    
            return
    MS::kSuccess;
        };
    
     if
    (drivenSurfaceCvU!=baseSurfaceCvU||drivenSurfaceCvV!=baseSurfaceCvV)
    
     {
              //cout<<"drivenSurface與baseSurface不匹配,變形不產生..."<<endl;
     
            MGlobal::displayWarning("drivenSurface與baseSurface不匹配,變形不產生...");
    
            return
    MS::kSuccess;
     };
       
    
        MPoint
    pt;
        MPoint
    ptAfterDeformed;
        MPoint
    pointInSurfacePointMatrix;
        double
    paramU;
        double
    paramV;
        double
    newParamU;
        double
    newParamV;
        int
    index;
        float
    weight;
        bool
    test;
        if
    (fixedBasevalue==false)
        {
    
              //cout<<"履帶模式..."<<endl;
     
              for(iter.reset();!iter.isDone();iter.next())
    
            {
    
                  index=iter.index();
    
                //cout<<"index:"<<index<<endl;
     
                  weight=weightValue(block,multiIndex,index);
    
                  //cout<<"weight:"<<weight<<endl;
     
                if
    (weight==0)
                  {
    
                      //cout<<"權重為0,此點變形不產生..."<<endl;
     
                      continue;
    
                  };
    
                pt=iter.position(MSpace::kObject);
    
                  pt=pt*mat;
    
                //cout<<"position:"<</endl;
</weight<<endl;
</index<<endl;
</endl;
</endl;
</endl;
</drivensurfacecvu<<"  "<<drivensurfacecvv<<"  "<<basesurfacecvu<<"  "<<basesurfacecvv<<" "<<endl;
</endl;
</endl;
</pointaffterdeformed<<endl;
</surfacepointmatrix<<endl;
</outpoint<<endl;
</surfacepointmatrix<<endl;

 

 

王氏教育作品欣賞-3D
  

 

 

 

本期的maya履帶動畫綁定插件代碼,需要來取,就分享結束啦,如果需要更多建模教程,可以搜索繪學霸。在此,小編給大家推薦繪學霸的3D模型大師班,對建模感興趣的朋友可以來繪學霸咨詢喔。

 

 

 

免責聲明:本文內部分內容來自網絡,所涉繪畫作品及文字版權與著作權歸原作者,若有侵權或異議請聯系我們處理。
收藏

全部評論

您還沒登錄

暫無留言,趕緊搶占沙發
繪學霸是國內專業的CG數字藝術設計線上線下學習平臺,在繪學霸有2D繪畫、3D模型、影視后期、動畫、特效等數字藝術培訓課程,也有學習資源下載,還有行業社區交流。學習、交流,來繪學霸就對了。
繪學霸iOS端二維碼

IOS下載

繪學霸安卓端二維碼

安卓下載

繪學霸微信小程序二維碼

小程序

版權聲明
本網站所有產品設計、功能及展示形式,均已受版權或產權保護,任何公司及個人不得以任何方式復制部分或全部,違者將依法追究責任,特此聲明。
熱線電話
18026259035
咨詢時間:9:00~21:00
在線客服
聯系網站客服
客服微信:18026259035
公司地址
中國·廣州
廣州市海珠區曉港中馬路130號之19
繪學霸客戶端(權限暫無,用于CG資源與教程交流分享)
開發者:廣州王氏軟件科技有限公司 | 應用版本:Android:6.0,IOS:5.1 | App隱私政策> | 應用權限 | 更新時間:2020.1.6
主站蜘蛛池模板: 国产精品第十页 | 久操视频在线观看免费 | a级毛片毛片免费观看永久 a级毛片免费 | 国产专区91| 手机看片高清国产日韩片 | 九色综合久久综合欧美97 | 日本www色视频成人免费免费 | 日毛片| 日本免费观看视频 | 41sao.can在线观看国产 | 国产一级a毛片 | 亚洲欧美18v中文字幕高清 | 天天综合在线视频 | 欧美性受xxxx狂喷水 | 久草资源在线视频 | 欧美特黄视频在线观看 | 久久精品视频久久 | 爱插综合网 | 三级网址在线播放 | zzzzxxxx日本| 69av网址 | 伊人网视频在线 | 亚洲高清免费观看 | 激情五月婷婷在线 | 性夜影院爽黄a爽免费视频 性做久久久久久坡多野结衣 | 欧美人善交vides0| 免费观看69xxx视频在线 | 亚洲精品国产专区91在线 | 高清欧美不卡一区二区三区 | 国产一级做a爱免费观看 | 国产精品偷伦视频播放 | 九月婷婷人人澡人人爽人人爱 | 欧美aⅴ在线 | 成人自拍视频在线观看 | 观看日本剧情片的网站 | 99精品久久99久久久久久 | 免费一级a毛片夜夜看 | 国产孕妇色xxxxx | 国产精品夜色视频一区二区 | 国产区欧美 | 图片亚洲va欧美va国产综合 |