继上文继续写。有了顶点迭代器之后就可以利用MItMeshVertex类的getConnectedVertices方法来获取相连点并代入平滑算法。

选择什么样的平滑算法呢?本人比较懒,直接打开了计算机图形学(第四版)322页直接用bezier样条曲线的方法来做平滑。该算法的公式比较复杂,有大量阶乘计算,考虑到执行效率的问题,我决定简化这个式子,即在三点相连形成一条线的情况下,中间点的位置式子如下:

x(u) = x0 *(2!/(0!*2!) )*(u^0)*((1-u)^2)

+ x1 *(2!/(1!*1!) )*(u^1)*((1-u)^1)

+ x2 *(2!/(2!*0!) )*(u^2)*((1-u)^0)

y(u) = y0 *(2!/(0!*2!) )*(u^0)*((1-u)^2)

+ y1 *(2!/(1!*1!) )*(u^1)*((1-u)^1)

+ y2 *(2!/(2!*0!) )*(u^2)*((1-u)^0)

z(u) = z0 *(2!/(0!*2!) )*(u^0)*((1-u)^2)

+ z1 *(2!/(1!*1!) )*(u^1)*((1-u)^1)

+ z2 *(2!/(2!*0!) )*(u^2)*((1-u)^0)

考虑到当前只需要调整中间点的位置,该式子的线性关系可以忽略,于是直接设u = 0.5,中间点的位置式子即可简化为:

x = x0  * 0.25 + x1 * 0.5 + x2 * 0.25

y = y0  * 0.25 + y1 * 0.5 + y2 * 0.25

z = z0  * 0.25 + z1 * 0.5 + z2 * 0.25

该式子只是针对曲线上两点相邻的情况得。

考虑到利用顶点迭代器MItMeshVertex的getConnectedVertices方法得到的相连点一般都是四个(生产中大量使用四角面),所以需要对该式子拓展一下。又由于相连点数量不确定,因为会有三角面,也可能当前中间点在模型边缘上,导致相连点不会一直是四个。所以本人干脆删繁就简以性能为先,将式子转为求中值的形式:

x = (x0 + x1 + ... + xn) / connectedlist.length()

y = (y0 + y1 + ... + yn) / connectedlist.length()

z = (z0 + z1 + ... + zn) / connectedlist.length()

这样就省事了,当然这样的结果就是顶点特征不会明显,模型彻底平滑了。但考虑性能至上,就不纠结了。收工了~

maya中的顶点平滑算法(vertex smooth algorithm)的更多相关文章

  1. SRILM Ngram 折扣平滑算法

    关于n-gram 语言模型,大部分在这篇博客里 记过了,   SRILM 语言模型格式解读 , 其实看完了,ngram的大概用法都比较清楚了, 但是关于平滑算法,一直很模糊,就晓得一个"劫富 ...

  2. Ngram折扣平滑算法

    本文档翻译自srilm手册ngram-discount.7.html     NAME ngram-discount – 这里主要说明srilm中实现的平滑算法   NOTATION a_z      ...

  3. 原地算法(in-place algorithm)

    原地算法(in-place algorithm) 在计算机科学中,一个原地算法(in-place algorithm)基本上不需要额外辅助的数据结构,然而,允许少量额外的辅助变量来转换数据的算法.当算 ...

  4. maya中MFnMesh.h使用说明的翻译

    由于最近要修改一个maya中的deformer脚本,于是开始系统学习openMaya的一些知识,当然少不了得把一堆头文件说明看一遍.首先把MFnMesh.h这个文件翻译一下吧,不废话,上译文: 首先M ...

  5. 从Maya中把模型搬运至网页的过程

    虽然利用threejs来在网页中渲染3d模型不是第一次折腾了,但是还是遇到了各种问题.总结下我所遇到的问题,希望能给正在使用threejs的小伙伴一个帮助. 一.所使用的软件与开发环境 Maya201 ...

  6. 基于Vivado HLS在zedboard中的Sobel滤波算法实现

     基于Vivado HLS在zedboard中的Sobel滤波算法实现 平台:zedboard  + Webcam 工具:g++4.6  + VIVADO HLS  + XILINX EDK + ...

  7. 【Unity Shader】一、顶点函数(vertex)和片元函数(fragment)

    学习资料:http://www.sikiedu.com/course/37/task/430/show 学习Shader中顶点函数(vertex)和片元函数(fragment)的基本用法. Shade ...

  8. 时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)——三次指数平滑算法可以很好的保存时间序列数据的趋势和季节性信息

    from:http://www.cnblogs.com/kemaswill/archive/2013/04/01/2993583.html 在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在 ...

  9. unity3d 资源文件从MAX或者MAYA中导出的注意事项

    unity3d 资源文件从MAX或者MAYA中导出的注意事项     1.首先,Unity3d 中,导出带动画的资源有2种导出方式可以选择:    1) 导出资源时,只导出一个文件,保留模型,骨骼和所 ...

随机推荐

  1. guxh的python笔记六:类的属性

    1,私有属性 class Foo: def __init__(self, x): self.x = x 类的属性在实例化之后是可以更改的: f = Foo(1) print(f.x) # 1 f.x ...

  2. hdoj5754

    题意:略 国王和骑士用记忆搜索,注意骑士的移动是x-2,y-1或x-1,y-2.车是NIM博弈,后是威佐夫博弈.注意威佐夫博弈中两堆石子有大小之分,而输入不一定小在前. #include <io ...

  3. Windows 2003 Server R2 x64 IIS6.0 eWebEditor无法显示的问题

    64位的操作系统安装成功后,一般IIS也是默认的64位的解析,所以将程序放到64位操作系统上的时候,会出现IIS错误,解决方案也非常简单,将64位IIS停止,启动32位的就可以了. 输入以下命令启用 ...

  4. 基于Python——实现解压文件夹中的.zip文件

    [背景]当一个文件夹里存好好多.zip文件需要解压时,手动一个个解压再给文件重命名是一件很麻烦的事情,基于此,今天介绍一种使用python实现批量解压文件夹中的压缩文件并给文件重命名的方法—— [代码 ...

  5. jQuery对标签select优化:实现模糊搜索查询功能

    由于select标签中的option条数较多,翻页查询比较麻烦,需要对select标签进行优化,解决方法是通过增加模糊查询功能来提高用户体验感. 优化后的界面如下: 在实现这个优化的过程中,参考了两个 ...

  6. Matlab:高阶常微分三种边界条件的特殊解法(中心差分法,高精度导数边界处理)

    函数文件1: function b=F(f,x0,h,N) % b(1,1)=x0(1)-h*x0(2)-u(1); % b(2,1)=x0(2)+h*x0(1)^2-u(2)-h*f; b=zero ...

  7. 牛客练习赛23CD

    链接:https://www.nowcoder.com/acm/contest/156/C 来源:牛客网 题目描述 托米完成了1317的上一个任务,十分高兴,可是考验还没有结束 说话间1317给了托米 ...

  8. 小程序都报wxss编译错误

    解决方法: 在控制台输入openVendor() ,清除里面的wcc.exe  wcsc.exe  然后重启工具

  9. boost range zhuan

    Officialhttp://67.223.234.84/boost_doc/libs/range/doc/utility_class.html#sub_range http://blog.sina. ...

  10. 数据的双向绑定 Angular JS之开端篇

    接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...