继上文继续写。有了顶点迭代器之后就可以利用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. 雷林鹏分享:jQuery EasyUI 数据网格 - 合并单元格

    jQuery EasyUI 数据网格 - 合并单元格 数据网格(datagrid)经常需要合并一些单元格.本教程将向您展示如何在数据网格(datagrid)中合并单元格. 为了合并数据网格(datag ...

  2. hdu-1430 魔板 康拓展开+映射优化

    给定三种操作,将排列A转化为排列B,求最少步骤. 这种题目可以只跑一次bfs,比如只跑"12345678",那么如果遇到"23456781"->某个字符串 ...

  3. http content-type 与 java后端处理

    http中的常用的content-type有: application/x-www-form-urlencoded;charset=UTF-8  传递表单类数据 application/json;ch ...

  4. python中的进程池和线程池

    Python标准模块-concurrent.futures #1 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ...

  5. JavaScript基础知识点总结

    JavaScript----js 全栈课程-------全栈工程师 前端:信息展示,普通用户浏览---前端工程师(html+css:静态页面 js:页面的交互效果) 后台:信息管理,管理员,数据库-- ...

  6. Starting MySQL....The server quit without updating PID file[失败]/lib/mysql/ip12189.pid). 错误一例

    [root@ip12189 etc]# service mysqld startStarting MySQL....The server quit without updating PID file[ ...

  7. VS2015在win10上编译的程序不能在Win7上运行的原因

    研究了下,搞懂原理了.是VS 2015 编译的问题,因为我是Win 10 ,所以会用到win 10 的SDK ,这个SDK 依赖了Universal C Runtime ,就是API-MS-CRT-X ...

  8. UVa LA 4254 - Processor 二分,贪心 难度: 1

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  9. jq demo 点击评分组件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 使用mybatis调用存储过程(注解形式和配置文件形式)

    最近在看资料中涉及到mybatis,突然想到mysql中的视图.存储过程.函数.现将在使用mybatis调用mysql的存储过程使用总结下: 使用的环境:mybatis3.4.6,mysql 5.6, ...