最近修改一个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 iso 下载地址

    Centos 5.3  下载地址: http://www.karan.org/mock/5.3/CentOS-5.3-i386-bin-1to6.torrent http://www.karan.or ...

  2. 文件上传下载显示进度(vue)

    编写了一个vue组件,可以实时显示文件上传和下载时候的进度 <template> <div v-show="circleProgress_wrapper_panel_sta ...

  3. angular4,6 引入第三方插件的方法

    话不多说直入主题,最常见的有三种方式来引用第三方插件,下面以jquery插件及基于JQuery的两款插件:nicescroll和rangeSlider为例. 一.第一种方式:在.angular-cli ...

  4. 正确学习Linux系统的5个建议

    摘要: 最近几年Linux系统应用越来越广泛,以至于很多人开始热衷学习Linux.但是我们都是从小都是学习windows系统长大的,从windows 98到现在的windows 10,而根据学习win ...

  5. Maximum Average Subarray

    Given an array with positive and negative numbers, find the maximum average subarray which length sh ...

  6. JavaScript的使用你知道几种?(上)

    往期回顾 在上一期的<JavaScript的组成 | DOM/BOM>☜里,我们有对文档对象模型-DOM.浏览器对象模型-BOM 这两大部分进行了解学习,如果有还不是很明白的小伙伴们,可以 ...

  7. 洛谷p1067

    题目https://www.luogu.org/problemnew/show/P1067 #include<iostream> #include<cstdio> #inclu ...

  8. CreateThread给线程函数传递的参数

      HANDLE WINAPI CreateThread ( __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, // 指向SECURITY_ATTR ...

  9. testDecoration

    def count(): fs = [] for i in range(1,4): def f(): n=i*i return n fs.append(f) return fs c1,c2,c3 = ...

  10. SignalTap导致PCIe Read/Write卡死

    /********************************************************************** * SignalTap导致PCIe Read/Write ...