??
Attractive(At,Bt,?,oAt,oBv);//计算函数 ?? }
上述代码的算法非常简单,功能效果也略显单调,但只要开发者融入自己的思想,就可以开发出个性化功能。
(4)更新节点的当前输出属性数据
通过计算,新的数据已经产生了,需要将这些数据传递给当前输出属性,以实现数据更新。同输入属性数据的获取一样,需先通过MDataBlock类的out-putValue函数获取节点的输出属性的MDataHandle类对象,该对象不可读,只可写。如,MDataHandle datoutAt=data.outputValue(attraction::outAt,&returnStatus);然后,调用MDataHandle类set()函数进行数据更新,当然更新数据的类型必须与输出属性数据一致或兼容。如,datoutAt.set(oAt);最后,还要清除plug标记,即说明属性已被重新计算,如,data.setClean(outAt);
3.5节点的初始化定义
initialize()函数定义了节点属性的初始化设置,分为三步操作。
(1)属性创建和设置。在C++API中,一个属性的创建和编辑是通过MAttribute类及其派生类完成的,有MFnNumericAttribute、MFnUnitAttribute、MFnType-dAttribute等等。其中MFnNumericAttribute类是最常用的,在该类中定义了两种create()函数来实现节点属性的创建。如:
MFnNumericAttribute
nAttr;frame=nAttr.create(\其参数依次是\长名\短名\数据类型,默认值为1,状态返回(缺省);
inAt=nAttr.create(\其参数依次是\长名\短名\子属性
1,子属性2,子属性3,状态返回(缺省)。
上述代码将实现属性frame和inAt的创建,其中子属性inAtx是inAt的x分量,也是节点的属性,需在节点类的成员变量中事先声明。
(2)属性添加。属性创建和设置完之后,所有的属性需调用MPxNode类的addAttribute()函数添加到节点中去。如,addAttribute(inAt);addAttribute(frame);
(3)属性影响。属性虽然已经添加到了自定义的节点中去了,但该节点仍然不能正常工作,还需定义属性之间的影响,确定输入属性与输出属性的关系。
建立属性影响需调用MPxNode类的attributeAffects()函数。如,attributeAffects(inAt,outAt);attributeAffects(frame,outAt); 这样,输出属性outAt就受到输入属性inAt和frame的影响,当inAt和frame变化时,outAt就需要更新计算。
3.6编译链接和节点加载
完成上述步骤,则节点类已被创建,随后调试程序,并编译链接生成动态链接文件,如attraction.mll,该文件名称由VC.net在新建工程组时,利用Maya Plug-in Wizard插件向导自定义的,默认文件名myCmd.mll。
这些mll文件类似于Windows的dll文件,区别在于mll文件只能由Maya调用。
进入Maya总菜单栏的Windows→Setting/Preference→Plug-in Manager,打开Plug-in Manager对话框,选择browse将attraction.mll导入,则在Plug-in Manager对话框的Other Registered Plugins项目中可以找到attraction.mll,并在loaded上打勾,即说明节点被加载。现在就可以在Maya的command line或script editor中键入\attraction;\命令来创建一个节点实例,默认的新建节点名为attraction1。卸载节点也非常方便,只要去除loaded上的勾即可。
3.7场景属性与节点属性的关联
本文采用并极力推荐制作简单脚本完成属性关联,一来便于场景重建,二来减少C++程序的许多复杂操作。虽说是脚本,实际上由Maya命令组成。假设场景中存在一物体球A,要求每一帧调用节点的computer(),将球A位置信息按照实际算法更新成新的值,实现球A的运动,如图5。
其中,connectAttr是Maya用来关联属性的命令关键字,A.t为场景中球A的位置信息,inA_position是节点attraction1的输入属性inAt的长名,outA_position是输出属性outAt的长名。这样,一个Maya自定义节点就创建完成了,用户或开发者可以自由调用和修改该节点,也可以按照自己的创作思想创建新的节点。
参考文献
[1]http://www.alias.com
[2]郭新新,徐帆.Maya 5.0使用培训教程[M].北京:清华大学出版社.2004 [3]匡天君,滕远道等.基于MFC和OpenGL三维图形的开发[J].微计算机信息(测控仪表自动化).2004
[4]Mark R. Wilkins, Chris Kazmier, Stephan Oster burg. MEL Scripting for Maya Animators[M].Beijing: Publishing House of
Electronics Industry,2004
[5]David A.D. Gould. Complete MAYA Programming[M].Beijing: Publishing House of Electronics Industry, 2004