实验室做网格处理方面的算法,写界面很麻烦,所以有了利用maya和matlab进行数据连通的念头,于是有了这个插件。

这个插件可以把maya的网格数据导入matlab之中,完成计算之后重新返回maya。适合平时快速做一些网格数据的可视化工作,以及一些小试验。

选择maya而不是max的原因是,maya的数据是用节点组织的,可以很方便地组合不同的节点构造出新的功能,而在max里面一切都是隐藏的,要实现新的功能十分不方便。

如果需要代码,可以在这里下载 https://github.com/league1991/Maya2Matlab

下面以一个简单的例子演示插件的用法。在这个例子中,我们给模型加噪声,就像max的噪波修改器一样。

1.配置好插件之后,打开maya,可以看到插件工具栏:

下面介绍一些按钮的功能:

+/-MA                                 加载、卸载插件

+/-Eng                               打开/关闭matlab引擎

RsMa                                彻底刷新matlab引擎的按钮,当你修改了某个m文件,想matlab重新读取你新的代码,就要先刷新matlab引擎

m2d/d2m/m2m               数据转换节点按钮,为了统一处理各种数据,实现了一种自定义的矩阵数据类型matlabData,maya的各种数据都统一转成matlabData然后才能在插件节点里面传输。这3个节点的意思分别是  maya数据->matlabData  matlabData->maya数据  maya网格->matlabData。

mat                                    matlab节点,允许用户输入matlab脚本

mi                                      动画序列插值节点

ms                                     点边面选择节点,提取选中的顶点、边、面序号

mod                                   修改网格节点

exe                                     与外部exe程序通过socket通信

2. 为了方便编辑,建议把maya界面视图配置成三块:透视图+节点视图+属性编辑器,如图:

这样可以同时看到节点结构和计算结果

3. 好,现在开始教程,首先我们创建或导入一个模型,这里简单起见,创建了一个球。之后的场景大概是这样:

左边的透视图多了一个球,右边的节点视图多了三个节点。

节点的方框里面有两行字,第一行表示节点的名字,第二行表示节点的类型。

熟悉面向对象编程的人可以发现,一个节点就好像一个类的实例,名字就相当于这个实例的变量名,而节点类型自然就相当于类名了。

对于这三个节点,pSphere1是一个变换节点(类型为transform),记录了球的位置、旋转这些信息。polySphere1是一个球生成器(类型为polySphere),根据各种参数,例如半径,分段数等等生成一个球网格,而pSphereShape1(类型为mesh)就是一个放着网格数据的容器。

图中的箭头表示什么呢?对程序员来说,可以理解成表示“赋值”,相当于一句话:

pSphereShape1.InMesh = polySphere1.Output;

inMesh和output都是各自节点类型的一个数据成员。通常列在右边的是作为输出,在左边的作为输入。

也可以理解成数据的流向。也就是说,把球生成器的output变量的数据(就是一个球网格)放到pSphereShape1的inMesh变量里面。

3. 现在我们已经有了原数据,下一步要做的是:把它转换成matlabMatrix格式。

在工具架上点一下m2m,创建一个mesh2Matrix类型的节点:

然后把pSphereShape1的out mesh 连到 mesh2Matrix 的 inputMesh 里面:

怎么连? 请看下面几幅图:

(1)在pSphereShape1的右边白点上点一下,出来一个菜单

(2)选择OutMesh之后,拉出来一个黄色箭头的线。

(3)在mesh2Matrix的左边白点上点一下,出来一个菜单,这时候可以直接选inputmesh。有时候你要的变量没有出现,就要点other..

(4)点other之后弹出来一个菜单,下面是成员变量(或者说是节点的各种数据)的列表。点一下inputMesh,连接成功。

4. mesh2Matrix负责数据转化,现在可以获得转化之后的matlabMatrix矩阵了。但是它在哪里呢?点开mesh2Matrix1看看:

出来很多个Matrix结尾的名字,下面逐个解释:

Adjacency Matrix  顶点邻接矩阵,是一个稀疏矩阵,矩阵大小为点数x点数,若顶点i与顶点j相邻 对应元素非0

Avg Normal Matrix ,Bitangent Matrix , Tangent Matrix 法线,切线,副切线矩阵,大小为点数x3

Min/Max Curvature Direction最小/最大曲率方向,大小为点数x3

Min/Max Curvature 最小/最大曲率大小,大小为点数x3

Vertex Matrix 顶点坐标矩阵,大小为点数x3

Vertex Edge/Face Incidence Matrix 顶点和边/面的关联矩阵,若顶点与某条边/某个面邻接,对应元素非0

现在我们需要的是顶点矩阵。

5. 把顶点数据导入matlab ,点一下mat按钮,创建一个matlab节点,然后把vertex matrix 连到 matlab节点的inputMatrix[0],如图:

可以发现场景多了一个matlab图标,可以通过点击这个图标直接选定matlab对象。

为了测试数据是否连通,在属性编辑器输入in0,点一下compute,可以看到有输出

在这个窗口里面,Matlab Command表示你要输入的matlab 命令,in0就是对应inputMatrix[0]的matlab变量,点compute之后,这个命令会被发送到matlab引擎执行,结果显示在output窗口。如果勾选了immediate update,则每次节点被求值的时候都会调用matlab引擎,这样可以在调参数的时候实时预览结果。

也可以在matlab引擎输入in0,结果是一样的

6. 现在顶点数据已经被读出,我们利用matlab加入噪声。

输入matlab命令,按compute 之后的结果是这样的:

首先根据矩阵大小获得点数,存在nVtx变量里面

然后新建一个随机数矩阵 rnd

最后两者相加,结果存在out0变量,这个变量对于outputMatrix[0]

scatter3是一个画散点图指令,所以命令执行完就会显示一个matlab窗口。

7.现在已经有了扰动的结果,下一步是重建网格。

创建一个meshmodifier节点,同时把原网格复制一份,可以看出多了三个节点。

8. 按下图连接节点,连了之后重新按Compute计算一次,可以发现有了一个扰动的网格

值得注意的是原网格的outMesh变量要连在meshModifier的inMesh之中,因为meshModifier需要原网格的拓扑结构,结合新的顶点位置来构建新网格。

9. 若要实时控制扰动程度,可以添加一个data2Matrix节点,连到inputMatrix[1]的地方

同时matlab代码改为如下,factor 接受in1的输入,勾选immediate update

10. 拖动data2Matrix的 current scalar value的时候,噪声大小会实时变化,如图

教程完毕。

Maya 与 Matlab 数据互联插件使用教程的更多相关文章

  1. 【转】基于jquery,bootstrap数据验证插件bootstrapValidator 教程

    bootstrap:能够增加兼容性的强大框架. 因为项目需要数据验证,看bootstrapValidator 还不错,就上手一直,完美兼容,话不多说. 需要引用css: bootstrap.min.c ...

  2. 基于jquery,bootstrap数据验证插件bootstrapValidator 教程

    bootstrap:能够增加兼容性的强大框架. 因为项目需要数据验证,看bootstrapValidator 还不错,就上手一直,完美兼容,话不多说. 需要引用css: bootstrap.min.c ...

  3. WordPress插件制作教程概述

    接下来的一段时间里,开始为大家讲解WordPress插件制作系列教程,这篇主要是对WordPress插件的一些介绍和说明,还有一些我们需要注意的地方,以及需要掌握的知识. WordPress插件允许你 ...

  4. Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程

    原文:Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程 Red Gate ...

  5. MATLAB R2018b Mac中文版安装教程

    MATLAB r2018b mac中文版是一款强大的可视化数学分析软件,专门用于在Mac上执行数值计算,编程和可视化任务时极大地提高您的工作效率.在MATLAB的帮助下,您可以分析数据,创建应用程序, ...

  6. Nrpe 插件安装教程

    Nrpe 插件安装教程  blog地址: http://www.cnblogs.com/caoguo 一.nagios plugins的安装 [root@Nrpe ~]# yum install -y ...

  7. 【】Nessus安全测试插件编写教程

    Nessus安全测试插件编写教程 作者:Renaud Deraison 翻译:nixe0n 1.怎样编写一个高效的Nessus安全测试插件 在Nessus安全测试系统中, 所有的安全测试都是由ness ...

  8. 数据可视化地图制作教程,这个免费BI软件轻松搞定

    ​数据可视化地图制作教程 现在做数据分析基本上离不开数据可视化,在大量的数据中,有很大一部分数据都与地理信息相关,因此,在数据可视化中,可视化地图是非常重要的一部分.无论是新闻报道,还是商业分析报告, ...

  9. 【Discuz】关闭QQ互联插件提示信息:系统繁忙,请稍后再试

    版本:X3.2.20160601 提示信息 系统繁忙,请稍后再试 解决方案 Step1.删除QQ互联插件目录 网站的根目录\source\plugin\qqconnect Step2.上传原始QQ互联 ...

随机推荐

  1. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q19-Q20)

    Question 19 You are designing a custom SharePoint 2010 solution package. It will include a feature t ...

  2. Android终止线程的方法

    线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,线程结束之后就报废了,不能再次start,只能新建一个线程对象.但有时run方法是永远不会结束的.例如在程序中使用线程进行So ...

  3. NSValue&NSNumber

    void testForNSValue(void) { int i=10; //    NSLog(@"encode(int)=%s",@encode(int)); //    N ...

  4. C中的流程控制

    一. 流程控制 l 顺序结构:默认的流程结构.按照书写顺序执行每一条语句. l 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码. l 循环结构:在给定条件成立的情况下,反复执行某一 ...

  5. 【Android】用MediaRecorder录制视频太短崩的问题

    具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...

  6. 网络编程3--毕向东java基础教程视频学习笔记

    Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...

  7. JavaScript Patterns 5.4 Module Pattern

    MYAPP.namespace('MYAPP.utilities.array'); MYAPP.utilities.array = (function () { // dependencies var ...

  8. Windows搭建python开发环境,python入门到精通[一]

    从大学开始玩python到现在参加工作,已经有5年了,现在的公司是一家.net的公司用到python的比较少,最近公司有新项目需要用到python,领导希望我来跟其他同事training,就有了这篇博 ...

  9. x01.os.13: 文件系统

    停了两天电,忽然得空闲.找来破吉他,已然不成弦.           丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...

  10. 用VC6开发嵌入式LINUX程序

    黄山松 (Tom Huang) 发表于博客园http://www.cnblogs.com/tomview/ 首先说明一下,VC6自然不能直接开发LINUX程序,主要使用的是它的编辑环境而已,但是作为一 ...