在3d具体化的自动塑造礼服

时间:2016-03-17 17:24:07

标签: graphics 3d blender makehuman daz3d

我已经看到3D服装项目模型在Daz3d,poser,makehuman等软件中自动重塑,当穿着的模特被修改时(通常用变形)。我有一种情况,我必须在opengl es做类似的事情。有人可以告诉我这样做的基本逻辑吗?是变形工作还是有其他方式吗? 是否有网格修改库

1 个答案:

答案 0 :(得分:1)

我会这样做:

  1. <强>网

    通常表示为某些拓扑网格中的嵌套点网络。为此我会把衣服分成“圆筒”。每个“圆柱体”将由点网格表示,如下所示:

    struct _pnt { float x,y,z; bool stretch,done; };
    _pnt pnt[na][nb][3];
    

    其中

    • na应该取决于圆柱直径,但通常na=36在所有情况下都足够了
    • nb应取决于“cyliner”高度和布料细节......

    cylinder

    每个点的3D坐标x,y,z最初设置为布料的形状,就像充满气球般的空气一样。 stretch标志如果该点位于某个橡皮筋上,迫使其粘在皮肤上。 done只是计算的临时标志。

  2. <强>动力学

    现在,如果你想计算实际的布料形状,那么你需要:

    1. 为所有积分设置done=false
    2. 将所有stretch个ed点设置为人/假皮肤(网格曲面)上的相应位置,并为它们设置done=true。这些点通常会覆盖整个切片(b=constant,a=0,1,2,...na-1)
    3. 每个拉伸点(a0,b0)
    4. 计算链接点。背后的数学/物理是:

      所以如果你点击另一个(a0+1,b0),(a0+2,b0)...点使用第二曲线并且如果不使用 Newtonian / D'Alembert 动力学模拟来获得位置(那个yu),则扫描点stretch需要将速度vx,vy,vz添加到_pnt。当计算位置时,为所有计算点设置done=true

      此外,如果点的计算位置在头像网格中,则必须将其位置设置为头像表面并将其速度设置为零。

      处理网格自碰撞(动态影响)

    5. 搜索所有非计算点done==false并从其计算的邻居中插入其位置。

  3. 如果你有这个工作,你可以为每个点添加更多的功能,如弹性,质量,...系数等。