Maya中操作普通DG节点和Dag节点的区别

在Maya中,Dependency Graph是Maya的核心,由许多DG节点互联组成。其中包含了两种我们常见的节点,一种是普通的DG节点,一种是DAG(directed acyclic graph)节点。DAG节点在本质上也是一种DG节点。

当我们需要操作DG节点的时候,我们知道,用户是不能直接访问Maya核心的,Maya在其核心之上提供了一系列严格定义的接口,使用户能够通过这些API来操作Maya内部数据。当我们需要对DG节点进行操作时,我们可以使用MFnDependencyNode函数集来进行操作,MFnDependencyNode需要设定一个DG节点MObject对象作为操作数据,具体如下:

MObject thisNode = thisMObject();
MFnDependencyNode fnThisNode( thisNode );
MFn::type type = fnThisNode.name();

以上是我们常规的对DG节点进行操作的方法,对于DAG节点来说,我们也可以通过同样的方法来设定一个DAG节点对象到MFnDagNode来对其进行操作,

MFnTransform  fnTransform;
MObject transform = fnTransform.create();
MFnDagNode fnDagNode( transform );
MFn::type type = fnDagNode.type();

从表面上看,上面这个操作似乎没有问题,但是我们想一想对象实例,由于可能会存在多个DAG路径到指定的MObject对象,那么如果只给定一个MObject对象,Maya是不可能对这个DAG节点进行在世界空间中进行操作的。换句话说,Maya不可能只通过一个给定的MObject对象来确定一个指定的实例。

所以,在大部分情况下,请使用DAG路径(MDagPath)来指定一个DAG节点,因为DAG路径总是会指向一个对象的特定实例,这样才能进行世界空间转换。

原文地址:https://www.cnblogs.com/johnonsoftware/p/2933634.html