最近修改一个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. 在table表格中实现圆角效果

    在table中设置border-radius发现不起作用,网上查找了一番,原因是border-collapse:collapse和border-radius不兼容. 设计图效果 代码实现效果: < ...

  2. VNC错误修复⽅方法

    VNC错误修复方法 VNC错误描述 vnc viewer开启后弹窗提示 Could not connect to session bus: Failed to connect to socket /t ...

  3. [atcoder contest 010] F - Tree Game

    [atcoder contest 010] F - Tree Game Time limit : 2sec / Memory limit : 256MB Score : 1600 points Pro ...

  4. element-ui <el-input> 注册blur事件

    <template> <div class="demo"> <el-input placeholder="注册blur事件" v- ...

  5. .Net Core2.1 部署到IIS

    1. 发布网站,和.net framework MVC一样 2.安装WindowsHosting和.Net Core SDK 下载地址:https://www.microsoft.com/net/do ...

  6. Saiku关于MDX过滤的使用(九)

    Saiku查询设定:Saiku查询数据时,每次都是全量查询的,我们现在需要默认展示近一周的数据. 通过编写使用MDX表达式进行过滤 通过编写MDX表达式,添加新的指标信息对一周以内的数据进行标识 (其 ...

  7. Java易错题(1)

    检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果. public class HelloB extends HelloA { public HelloB() { } { Syst ...

  8. 关于Excel导出实例(适合新手,比较详细)

    需要源代码的可以加我微信好友gqljxg1514 1,首先配置依赖pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&q ...

  9. Sed+Grep 快速替换查找字段(批量替换字符串)

    格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl路径` 命令分解: grep 查找字段 -rl路径   列出”路径”中” 查找字段” 的所有文件 ...

  10. 前端修炼の道 | <div> 标签简介

    <div> 标签是最基本的,同时也是最常用的标签. 该标签是一个双标签,出现在主体区域中,主要作为一个容器标签来使用,在 <div> 标签中可以包含除 <body> ...