最近修改一个maya中的jlCollisionDeformer工具,该工具有一个明显不足,变形后顶点分布太乱,无法满足生产需求。于是考虑对该变形后的顶点进行平滑处理。既然要做平滑处理就要获取当前点及与该点保持连接关系的点的坐标,再以此为基础代入平滑算法。

我的基本思路是利用maya.OpenMaya模块中现有的api来获得一个基于当前模型的顶点迭代器(MItMeshVertex)。然后利用迭代器内置方法来逐顶点的进行平滑。

第一次使用OpenMaya模块还是很不熟练,看了好几天的技术文档。废话不多说,直接上代码:

 ##############create a new MObject!#####################
vertexcount = self.newpoints.length()
inMeshFn.getVertices(mesh_counts,mesh_connect)
polycount = inMeshFn.numPolygons() tempMeshData = OpenMaya.MFnMeshData()
tempObject = OpenMaya.MObject()
tempObject = tempMeshData.create()
newObject = OpenMaya.MObject() MeshFs = OpenMaya.MFnMesh()
#create a DAG path newObject = MeshFs.create(vertexcount,polycount,inPoints,mesh_counts,mesh_connect,tempObject) Inmesh_vertex_iter = OpenMaya.MItMeshVertex(newObject)

第二行或者当前模型的顶点数量。

第三行获取了当前模型的顶点分布信息。

第四行获取了当前模型的多边形面数。

第六行为tempMeshData对象分配内存地址,该对象为MFnMeshData类型。

第七行为tempObject对象分配内存空间,该对象为MObject类型。

第八行利用tempMeshData对象的create()方法创建一个内存空间,并赋值给tempObject对象。这样tempObject对象就有了内存空间去存储对应信息了。

第九行为newObject对象分配内存地址,该对象为OpenMaya.MObject()。用于存储返回值。

第十一行为MeshFs对象分配内存地址,该对象为MFnMesh类型。

第十四行利用MFnMesh类的create方法创建一个新的MObject对象,返回给tempObject及newObject对象。

第十六行以newObject对象为参数,初始化MItMeshVertex对象,生成一个顶点迭代器,并返回给Inmesh_vertex_iter对象。

不得不说maya中构建顶点迭代器的方法很麻烦,但这样的方式可以保证程序的安全稳定高效,充分利用了内存的特质。本人目前看的OpenMaya技术文档还仅限几个类,该文如有不足还请指正。

有了这个迭代器我们就可以非常快速高效的植入平滑算法了,你可以通过这种方法多次迭代产生平滑度更高的pointsArray信息。

以上。

怎样生成一个顶点迭代器(MItMeshVertex)的更多相关文章

  1. python基础一 ------利用生成器生成一个可迭代对象

    #利用生成器生成一个可迭代对象#需求:生成可迭代对象,输出指定范围内的素数,利用生成器产生一个可迭代对象#生成器:本身是可迭代的,只是 yield 好比return返回,yield返回后函数冻结状态, ...

  2. 用php生成一个excel文件(原理)

    1.我们用php来生成一个excel文档来讲述其原理: excel2007里面的文档目录组成部分为: 2.我们使用ZipArchive()方法来生成一个简易的excel文件. 使用方法: 3.代码如下 ...

  3. js生成一个不重复的ID的函数的进化之路

    在MongoDB中的ObjectID,可以理解为是一个不会重复的ID,这里有个链接http://blog.csdn.net/xiamizy/article/details/41521025感兴趣可以去 ...

  4. 动态生成一个设定好特殊样式的Tlabel,快速生成代码

    动态生成一个设定好特殊样式的Tlabel,快速生成代码: 1.自己先在可视化界面设定一个Label,像这样: 2.选择label,快捷键ctrl+C 复制,粘贴带代码编辑器去,会生成一段这样的窗体代码 ...

  5. 【代码笔记】iOS-通过颜色来生成一个纯色图片

    一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ...

  6. C# 如何生成一个时间戳

    在程序中,常常会用到时间戳,如何生成一个时间戳呢? /// <summary> /// 获取时间戳 /// </summary> /// <returns>< ...

  7. ZeroMQ接口函数之 :zmq_curve_keypair - 生成一个新的CURVE 密钥对

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve_keypair zmq_curve_keypair(3) ØMQ Manual - ØMQ/4.1.0 ...

  8. Bitmap文件格式+生成一个BMP文件

    Bitmap的文件格式: #define UINT16 unsigned short #define DWORD unsigned int #define WORD short #define LON ...

  9. 今天网站后台登录页面需要生成一个二维码,然后在手机app上扫描这个二维码,实现网站登录的效果及其解决方案如下

    要实现二维码登录,需要解决2个技术,1.需要js websocket 与后台php实现长连接技术 2.实现二维码生成技术 要实现这个功能第二个算是比较简单,只需要下载一个php的二维码生成器即可,但要 ...

随机推荐

  1. linux中执行shell命令的几种常用方法

    1 切换到shell脚本所在目录执行shell脚本: cd /test/shell ./test.sh 2 以绝对路径的方式执行shell脚本: /test/shell/test.sh 3 直接使用b ...

  2. SQL SERVER 连接查询(join...on...)

    SQL SERVER联结查询包含inner join,left join,right join,outer join (on)四种. [inner join]:行数为满足条件n*m,并且on的条件对两 ...

  3. 告诉你们!我是怎么与Linux系统接触的!

    最开始接触Linux是在15年来北京后,刚来北京机缘巧合,从事了实施工程师的工作.实施工作是一个面很广的工作.业务.技术.沟通等等方方面面的.技术一直是我是的短板.刚开始,公司在要在阿里云上部署APP ...

  4. 微服务-开发框架之springboot by 大雄daysn

    目录 一.关于springboot 二.springboot的实践 2.1发布一个rest的api 2.2端点 2.3健康检查 2.4远程监控 一.关于springboot 由来:spring1.0- ...

  5. Django进阶之CSRF

    简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功能有 ...

  6. nopi 简洁笔记

    导出excel /// <summary> /// 增加二维码 /// </summary> /// <param name="dt">< ...

  7. 开机出错提示 cpu fan speed error detected

    问题:开机跳 cpu fan speed error detected 分析:提示是cpu fan speed 有问题进入 BIOS 设置了好几次仍不行 解决方法: 进入BIOS,BOOT选项卡,将 ...

  8. Java面试(一) -- 基础部分(1)

    1 .一个".java" 源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致.. ...

  9. BigDecimal加减乘除

    import java.math.BigDecimal; public class Testmath { public static void main(String[] args) { String ...

  10. 黄金点游戏 结队i项目

    结对编程——黄金点游戏   本次的结对编程的项目是黄金点游戏,我的结对对象是冯雨倩,我们的编程能力都不太好,而且都对C语言更熟悉些,因此我们决定用C语言来实现. (1)分工:角色分配:冯雨倩是领航员, ...