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

问题描述 投票:0回答:1

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

graphics 3d blender makehuman daz3d
1个回答
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. 动力学 现在,如果您想计算实际的布料形状,那么您需要: 为所有积分设置done=false 将所有stretched点设置为人/虚拟皮肤(网格表面)上的相应位置,并为它们设置done=true。这些点通常会覆盖整个切片(b=constant,a=0,1,2,...na-1) 对于每个拉伸点(a0,b0)计算链接点。背后的数学/物理是这样的: Catenary Curves Newtonian / D'ALembert dynamics 所以扫描点(a0+1,b0),(a0+2,b0)...,如果你击中另一个stretch点使用caternary曲线,如果不使用Newtonian / D'Alembert动力学模拟获得位置(因为你需要将速度vx,vy,vz添加到_pnt。当计算位置时设置done=true为所有计算点。 此外,如果计算出的点位于头像网格中,则必须将其位置设置为头像表面并将其速度设置为零。 处理网格自碰撞(动态冲击) 搜索所有非计算点done==false并从其计算的邻居中插入它们的位置。

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

© www.soinside.com 2019 - 2024. All rights reserved.