The present invention provides a 3D virtual garment fast attitude synchronization method, which is characterized in that the method comprises the following steps: the first step: the establishment of 3D human body model and virtual clothing model, the second step: the force calculation of virtual clothing model; the third step: attitude synchronization. The advantage of the invention is that when the posture of the human body changes, the posture of the garment is changed in real time, so as to realize the synchronization of the human clothing posture under all kinds of dressing postures.
【技术实现步骤摘要】
本专利技术涉及一种,用于服装企业网络销售服装时展示 三维服装动态着装效果,属于计算机科学中的虚拟现实
技术介绍
现有的三维服装的着装效果的展示方法中,皆是将服装应用在特定的人体姿态上,为 了更好的展示三维服装的着装效果,需要着装人体做出各种姿态,因此需要一种三维虚拟 服装快速姿态同步方法,现有技术中没有这种方法。
技术实现思路
本专利技术的目的是提供一种。为了达到上述目的,本专利技术的技术方案是提供一种, 其特征在于,具体步骤为第一步分别建立由三角形集合构成的三维人体模型以及虚拟服装模型,虚拟服装模 型设于三维人体模型外侧,三维人体模型的三角形的密度为10000个/人,虚拟服装模型的三角形的密度为3000-4000个/件;第二步第一步建立的虚拟服装模型中每个三角形的顶点为一个质点,三角形的三个 边代表一根非线性弹簧,其中第i个顶点尸i的受力方程为f = f, + d, = —A,c(x) — &懇C(x) (1)5x, 5x,其中,f为第i个顶点尸i所受内力的合力;f,和d,分别为作用在第i个顶点尸i上的弹性力 和粘性力;ii,l,2,…n; n为三角形的顶点总数;A为弹簧的虎克常数;、为弹簧的粘性系数;C(X)为与变形能相关的条件函数,C(;c) — X卜i:; X为弹簧的瞬时长度;Z为弹簧的原长;第三步姿态同步步骤3.1、以^表示三维人体模型的表面,以Sg表示虚拟服装模型的表面,计算在默 认姿势下^与三维人体模型间的最短距离矢量集(D),即对于(PIPeSJ,找出三维人体模型上的一点Q,满足{QIQe&,Q = argm ...
【技术保护点】
一种三维虚拟服装快速姿态同步方法,其特征在于,具体步骤为: 第一步:分别建立由三角形集合构成的三维人体模型以及虚拟服装模型,虚拟服装模型设于三维人体模型外侧,三维人体模型的三角形的密度为10000个/人,虚拟服装模型的三角形的密度为3 000-4000个/件; 第二步:第一步建立的虚拟服装模型中每个三角形的顶点为一个质点,三角形的三个边代表一根非线性弹簧,其中第i个顶点P↓[i]的受力方程为: f=f↓[i]+d↓[i]=-k*C(x)/*x↓[i]C(x)- k↓[d]*C(x)/*x↓[i]C(x) (1) 其中,f为第i个顶点P↓[i]所受内力的合力;f↓[i]和d↓[i]分别为作用在第i个顶点P↓[i]上的弹性力和粘性力;i=0,1,2,…n;n为三角形的顶点总数;k为弹簧的虎克常数 ;k↓[d]为弹簧的粘性系数;C(x)为与变形能相关的条件函数,C(x)=|x|-L;x为弹簧的瞬时长度;L为弹簧的原长; 第三步:姿态同步: 步骤3.1、以S↓[b]表示三维人体模型的表面,以S↓[g]表示虚拟服装模型的表面, 计算 ...
【技术特征摘要】
1、一种三维虚拟服装快速姿态同步方法,其特征在于,具体步骤为第一步分别建立由三角形集合构成的三维人体模型以及虚拟服装模型,虚拟服装模型设于三维人体模型外侧,三维人体模型的三角形的密度为10000个/人,虚拟服装模型的三角形的密度为3000-4000个/件;第二步第一步建立的虚拟服装模型中每个三角形的顶点为一个质点,三角形的三个边代表一根非线性弹簧,其中第i个顶点Pi的受力方程为<maths id=math0001 num=0001 ><math><![CDATA[ <mrow><mi>f</mi><mo>=</mo><msub> <mi>f</mi> <mi>i</mi></msub><mo>+</mo><msub> <mi>d</mi> <mi>i</mi></msub><mo>=</mo><mo>-</mo><mi>k</mi><mfrac> <mrow><mo>∂</mo><mi>C</mi><mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo></mrow> </mrow> <mrow><mo>∂</mo><msub> <mi>x</mi> <mi>i</mi></msub> </mrow></mfrac><mi>C</mi><mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo></mrow><mo>-</mo><msub> <mi>k</mi> <mi>d</mi></msub><mfrac> <mrow><mo>∂</mo><mi>C</mi><mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo></mrow> </mrow> <mrow><mo>∂</mo><msub> <mi>x</mi> <mi>i</mi></msub> </mrow></mfrac><mi>C</mi><mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo></mrow> </mrow>]]></math></maths>其中,f为第i个顶点Pi所受内力的合力;fi和di分别为作用在第i个顶点Pi上的弹性力和粘性力;i=0,1,2,…n;n为三角形的顶点总数;k为弹簧的虎克常数;kd为弹簧的粘性系数;C(x)为与变形能相关的条件函数,C(x)=|x|-L;x为弹簧的瞬时长度;L为弹簧的原长;第三步姿态同步步骤3.1、以Sb表示三维人体模型的表面,以Sg表示虚拟服装模型的表面,计算在默认姿势下Sg与三维人体模型间的最短距离矢量集{D},即对于{P|P∈Sg},找出三维人体模型上的一点Q,满足<maths id=math0002 num=0002 ><math><![CDATA[ <mrow><mo>{</mo><mi>Q</mi><mo>|</mo><mi>Q</mi><mo>∈</mo><msub> <mi>S</mi> <mi>b</mi></msub><mo>,</mo><mi>Q</mi><mo>=</mo><munder> <mrow><mi>arg</mi><mi>min</mi> </mrow> <msub><mi>Q</mi><mi>i</mi> </msub></munder><mrow> <mo>(</mo> <mo>|</mo> <msub><mi>PQ</mi><mi>i</mi> </msub> <mo>|</mo> <mo>)</mo></mrow><mo>}</mo><mo>,</mo><mi>i</mi><mo>=</mo><mn>0,1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>m</mi><mo>;</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo></mrow> </mrow>]]></math></maths>其中m为三维人体模型的三角形顶点总数,即Q点为Sb上到P点距离最近的点;步骤3.2、获得三维人体模型的动画,将动画按照每秒25帧的速度播放,对于每个三维人体模型的新姿态,计算Sb上的顶点的初步同步位置Pnew如下Pnew=Q′+R·|PQ|(3)其中Q′是Q点在新姿态下的位置,R是旋转矩阵,代表Q点的法向从nold到nnew的旋转,计算如下令旋转角θ=arccos(nold·nnew),r=nold×nnew,则<maths id=math0003 num=0003 ><math><![CDATA[ <mrow><mi>R</mi><mo>=</mo><mfenced open='[' close=']'> <mtable><mtr> <mtd><msup> <mi>x</mi> <mn>2</mn></msup><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>+</mo><mi>c</mi> </mtd> <mtd><mi>yx</mi><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>+</mo><mi>zs</mi> </mtd> <mtd><mi>xz</mi><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>-</mo><mi>ys</mi> </mtd> <mtd><mn>0</mn> </mtd></mtr><mtr> <mtd><mi>xy</mi><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>-</mo><mi>zs</mi> </mtd> <mtd><msup> <mi>y</mi> <mn>2</mn></msup><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>+</mo><mi>c</mi> </mtd> <mtd><mi>yz</mi><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>+</mo><mi>xs</mi> </mtd> <mtd><mn>0</mn> </mtd></mtr><mtr> <mtd><mi>xz</mi><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>+</mo><mi>ys</mi> </mtd> <mtd><mi>yz</mi><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>-</mo><mi>xs</mi> </mtd> <mtd><msup> <mi>z</mi> <mn>2</mn></msup><mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>c</mi> <mo>)</mo></mrow><mo>+</mo><mi>c</mi> </mtd> <mtd><mn>0</mn> </mtd></mtr><mtr> <mtd><mn>0</mn> </mtd> <mtd><mn>0</mn> </mtd> <mtd><mn>0</mn> </mtd> <mtd><mn>1</mn> </mtd></mtr> </mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo></mrow> </mrow>]]></math></maths>其中c=cosθ,s=sinθ;x,y,z分别为旋转向量r的x,y,z分量坐标值,此时新姿态下的虚拟服装模型的表面记为Sg-new,将新姿态下的三维人体模型的表面记为Sb-new;步骤3.3、对于{Pnew|Pnew∈Sg-new},寻找三维人体模型上的一点Qnew,满足<maths id=math0004 num=0004 ><math><![CDATA[ <mrow><mo>{</mo><msub> <mi>Q</mi> <mi>new</mi></msub><mo>|</mo><msub> <mi>Q</mi> <mi>new</mi></msub><mo>∈</mo><msub> <mi>S</mi> <mrow><mi>b</mi><mo>-</mo><mi>new</mi> </mrow></msub><mo>,</mo><msub> <mi>Q</mi> <mi>new</mi></msub><mo>=</mo><munder> <mrow><mi>arg</mi><mi>min</mi> </mrow> <msub><mi>Q</mi><mrow> <mi>i</mi> <mo>-</mo> <mi>new</mi></mrow> </msub></munder><mrow> <mo>(</mo> <mo>|</mo> <msub><mi>P</mi><mi>new</mi> </msub> <msub><mi>Q</mi><mrow> <mi>i</mi> <mo>-</mo> <mi>new</mi></mrow> </msub> <mo>|</mo> <mo>)</mo></mrow><mo>}</mo><mo>,</mo><mi>i</mi><mo>=</mo><mn>0,1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>m</mi><mo>,</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow> <mo>(</mo> <mn>5</mn> <mo>)</mo></mrow> </mrow>]]></math></maths>其中,m为Sb-new上的三角形顶点总数,即Qnew为Sb-new上距离Pnew最近的点;当Pnew位于Sb内部,即发生穿透时,将Pnew沿着靠近n的方向旋转90度,即令<maths id=math0005 num=0005 ><math><![CDATA[ <mrow><mi>d</mi><mo>=</mo><mfrac> <mrow><msub> <mi>P</mi> <mi>new</mi></msub><msub> <mi>Q</mi> <mi>new</mi></msub><mo>×</mo><mi>n</mi> </mrow> <mrow><mo>|</mo><msub> <mi>P</mi> <mi>new</mi></msub><msub> <mi>Q</mi> <mi>new</mi></msub><mo>×</mo><mi>n</mi><mo>|</mo> </mrow></mfrac><mo>,</mo> </mrow>]]></math> id=icf0005 file=A2009101945370003C3.tif wi=32 he=10 top= 121 left = 21 img-content=drawing img-format=tif orientation=portrait inline=yes/></maths>则P′new=R′·Pnew,R′为旋转矩阵<maths id=math0006 num=0006 ><math><![CDATA[ <mrow><msup> <mi>R</mi> <mo>′</mo></msup><mo>=</mo><mfenced open='[' close=']'> <mtable><mtr> <mtd><msup> <mi>x</mi> <mn>2</mn></msup> </mtd> <mtd><mi>yx</mi><mo>+</mo><mi>z</mi> </mtd> <mtd><mi>xz</mi><mo>-</mo><mi>y</mi> </mtd> <mtd><mn>0</mn> </mtd></mtr><mtr> <mtd><mi>xy</mi><mo>-</mo><mi>z</mi> </mtd> <mtd><msup> <mi>y</mi> <mn>2</mn></msup> </mtd> <mtd><mi>yz</mi><mo>+</mo><mi>x</mi> </mtd> <mtd><mn>0</mn> </mtd></mtr><mtr> <mtd><mi>xz</mi><mo>+</mo><mi>y</mi> </mtd> <mtd><mi>yz</mi><mo>-</mo><mi>x</mi> </mtd> <mtd><msup> <mi>z</mi> <mn>2</mn></msup> </mtd> <mtd><mn>0</mn> </mtd></mtr><mtr> <mtd><mn>0</mn> </mtd> <mtd><mn>0</mn> </mtd> <mtd><mn>0</mn> </mtd> <mtd><mn>1</mn> </mtd></mtr> </mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow> <mo>(</mo> <mn>6</mn> <mo>)</mo></mrow> </mrow>]]></math></maths>其中x,y,z分别为旋转向量d的x,y,z分量坐标值;步骤3.4、将虚拟服装模型进行悬垂以及平滑处理计算在已知时间t0下位置x(t0)和速度 id=icf0007 file=A2009101945370003C5.tif wi=8 he=5 top= 182 left = 99 img-content=drawing img-format=tif orientation=portrait inline=yes/>时,求解时刻t0+Δt时的位置x(t0+Δt)和速度 id=icf0008 file=A2009101945370003C6.tif wi=18 he=5 top= 193 left = 26 img-content=drawing img-format=tif orientation=portrait inline=yes/>Δt为时间步长,即求解下述微分方程<maths id=math0007 num=0007 ><math><![CDATA[ <mrow><mfrac> <mi>d</mi> <mi>dt</mi></mfrac><mfenced open='(' close=')'> <mtable><mtr> <mtd><mi>x</mi> </mtd></mtr><mtr> <mtd><mo>·</mo> </mtd></mtr><mtr> <mtd><mi>x</mi> </mtd></mtr> </mtable></mfenced><mo>=</mo><mfrac> <mi>d</mi> <mi>dt</mi></mfrac><mfenced open='(' close=')'> <mtable><mtr> <mtd><mi>x</mi> </mtd></mtr><mtr> <mtd><mi>v</mi> </mtd></mtr> </mtable></mfenced><mo>=</mo><mfenced open='(' close=')'> <mtable><mtr> <mtd><mi>v</mi> </mtd></mtr><mtr> <mtd><msup> <mi>M</mi> <mrow><mo>-</mo><mn>1</mn> </mrow></msup><mi>f</mi><mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo></mrow> </mtd></mtr> </mtable></mfenced><mo>-</mo><mo>-</mo><m...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。