【发布时间】:2019-04-22 18:01:46
【问题描述】:
我正在尝试使用 maya API 为 maya 编写变形器脚本,该 API 通过平移顶点将任何网格变形为球体。
我已经拥有的是一个变形器,它可以将网格的每个顶点以指定的数量沿其法线方向平移。这是使用以下等式完成的。
point += normals[itGeo.index()] * bulgeAmount * w * env;
其中,point 是网格上的顶点。 normals[itGeo.index()] 是一个向量数组,表示每个顶点的法线。 w 和 env 用于控制变形和包络的权重。
这段代码的基本作用是,它以指定的量沿法线方向平移顶点。虽然这适用于球体,因为球体的顶点法线将指向中心。它不适用于其他网格,因为法线不会指向网格的中心。
float bulgeAmount = data.inputValue(aBulgeAmount).asFloat();
float env = data.inputValue(envelope).asFloat();
MPoint point;
float w;
for (; !itGeo.isDone(); itGeo.next())
{
w = weightValue(data, geomIndex, itGeo.index());
point = itGeo.position();
point += normals[itGeo.index()] * bulgeAmount * w * env;
itGeo.setPosition(point);
}
我最初认为改变翻译方向可以解决问题。例如,如果我们能找到从网格中心到每个顶点的方向上的向量,并沿着该方向平移指定的量,就可以解决它。像这样:
point += (Center - point) * bulgeAmount * w * env;
其中,Center 是网格的中心。但这并没有给出预期的结果。我还希望以这样一种方式设置变形器,即用户可以输入半径“r”值,还可以将数量属性从 0 更改为 1,以将网格从其原始状态变形为球形。如果她的愿望和网格介于球体和原始形状之间,那么他可以在两者之间选择一个值。
这是我在 stackOverflow 中的第一篇文章。如果格式不符合社区的期望,我深表歉意。对此的任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: c++ visual-studio maya maya-api