Maya DG插件

本文介绍了Maya的依赖图(DG)插件开发,包括DG与DAG的区别、节点创建、属性与插口、compute函数、节点的生命周期、属性的特性以及数据流等核心概念,帮助理解如何在Maya中创建自定义节点并实现计算逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 概述

不要把DG(Dependency Graph)和DAG混淆,依赖图中的节点是用来负责控制动画和维护网格构建历史的,而DAG中的节点则用于定义外形节点以及它的空间位置。


DG插件的开发实质上是创建一些新的节点,将这些节点添加到依赖图中即可形成新的操作。Maya提供了十二种基本的类,派生自它们可以实现各种所需的功能。DG插件开发就是创建派生自这些基本类的新类,这些类都是以”MPx”开头,从文档Maya插件开发基础中可以知道这些类属于代理类,用于依赖图中构建各种节点。


基本的父类是”MPxNode”,派生自该类可以创建新的依赖节点(Dependency Node),它是Maya中最基础的DG节点。其他的十一个类均是派生自”MPxNode”。


二 基本示例

创建sine节点,向该节点输入一个值x,该节点就输出sin(x),为Maya/devkit/plug-ins/sineNode这个项目。

1 该类定义


#include <string.h>
#include <maya/MIOStream.h>
#include <math.h>
#include <maya/MPxNode.h>

#include <maya/MFnNumericAttribute.h>
#include <maya/MFnPlugin.h>

#include <maya/MString.h>
#include <maya/MTypeId.h>
#include <maya/MPlug.h>
#include <maya/MVector.h>
#include <maya/MDataBlock.h>
#include <maya/MDataHandle.h>

classsine : public MPxNode
{
public:
sine();
      virtual~sine();
virtual MStatus compute(const MPlug& plug, MDataBlock& data );
static  void*creator();
static  MStatus initialize();

public:
static  MObject input;         // The input value.
static  MObject output;        // The output value.
staticMTypeIdid;
};


2 函数解析

<1> 构造造函数

在节点被创建的时候被调用,或者调用createNode命令、MFnDependencyNode::create方法的时候也会触发该节点的构造函数。

<2> 析构函数

被定义成虚析构函数(参见虚析构函数的作用,讲的是使用基类指针删除派生类的对象的时候,这个时候可以触发派生类的析构函数)。该析构函数只有在节点真正被删除的时候才被调用。由于Maya中使用撤销操作队列,删除一个节点并不会真正导致该节点的析构函数被调用,所以假如删除操作被撤销,这个节点又可以被找回来而不是重新创建。一般来说,一个删除节点的析构函数只有撤销队列被flush的时候才会被调用。


<3> compute函数

virtual MStatus compute(const MPlug& plug, MDataBlock& data );

compute函数是DG节点的大脑,它进行由输入生成输出这个过程的真正运算工作




<4> creator函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值