发明名称 基于表面积保持的3D网格变形方法
摘要 本发明涉及基于表面积保持的3D网格变形方法,针对柔软物体3D模型的变形问题,给出了一种有效、快速、逼真的3D网格物体变形方法,属于计算机应用领域,特别是计算机图形学、虚拟现实技术领域。该方法将各种形式的变形看成由基本弯曲变形组成,各基本弯曲变形的局部区域进行独立计算,通过各区域的接合获得整体的变形结果;根据控制曲线划分变形区域,通过分离和合成变形基础网格和细节网格,提出与原网格模型无关的基础网格变形算法;使用阻尼振荡曲线仿真柔软物体弯曲变形内侧的表面皱褶;通过保持基础模型的顶点列长度实现表面积保持,提高网格变形的真实感,从而实现3D网格模型的变形。
申请公布号 CN101383053B 申请公布日期 2012.03.14
申请号 CN200810172233.4 申请日期 2008.10.31
申请人 北京理工大学 发明人 黄天羽;陈红倩;李凤霞;张艳;陈宇峰;李立杰
分类号 G06T17/00(2006.01)I 主分类号 G06T17/00(2006.01)I
代理机构 北京理工大学专利中心 11120 代理人 张利萍
主权项 基于表面积保持的3D网格变形方法,其特征在于包括以下步骤:步骤一:初始化首先读取3D几何模型的原始网格,然后确定局部变形网格区域,定义局部变形网格区域的控制曲线,局部独立变形网格;根据控制曲线的设置,执行分离网格;步骤二:分离网格将步骤一中控制曲线所涉及的网格区域分离生成两层网格:基础网格和细节网格;其中,基础网格和细节网格分离生成方法分别如下:1)生成基础网格:对每个独立变形网格,采用规则圆柱体网格作为变形基础网格,其底面为当前变形区域与上一区域的接合面,底面半径为当前区域的横切面半径均值,高为区域长度;基础网格用于步骤三的输入;2)生成细节网格:为在变形后保持网格的细节,将细节网格与原始网格顶点进行一一对应,使拓扑关系相同;细节网格通过原始网格与基础网格进行径向求差运算获得,每个顶点中保存相应顶点的径向高程差;步骤三:计算变形对步骤二中生成的基础网格,根据其控制曲线的弯曲状态,对基础网格上的任一顶点,首先计算该顶点所在的横截面,然后根据该顶点在该横截面中的相对位置,计算出变形后的最终位置,形成基础网格的变形,并将该变形结果作为步骤四的输入;步骤四:生成褶皱对步骤三中变形的基础网格,首先计算基础网格在弯曲变形过程中的表面积受压缩系数,根据该系数建立基于阻尼曲线的褶皱仿真函数,以便实现仿真物体弯曲变形内侧的皱褶;然后根据褶皱仿真函数计算基础网格上各顶点的高度调节值;之后通过保持各顶点列长度不变来实现网格变形中的表面积保持;最后将输出结果用于步骤五的输入;其中,基础网格在弯曲变形过程中的表面积受压缩系数、建立基于阻尼曲线的褶皱仿真函数、网格变形中的表面积保持,计算过程分别如下:1)计算网格压缩系数:规则基础网格的顶点按照列划分为顶点列,弯曲变形时除弯曲最外侧顶点列外,其余各顶点列的表面均被挤压,各列在弯曲与拉直状态的列长度比为压缩系数,压缩稀疏的取值为0到1,该系数越小表示压缩程度越大,压缩系数最大为1时表示未被压缩;2)计算褶皱仿真函数:由于顶点列的长度被压缩,造成表面积减少,这里引入皱褶仿真函数,根据表面皱褶在变形区域中间起伏最大并向两端逐渐减弱的特征与振幅递减的阻尼振荡曲线相同的特征,采用该曲线仿真物体表面的皱褶,褶皱仿真函数定义为 <mrow> <mi>f</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> <mo>=</mo> <mi>A</mi> <mo>*</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mfrac> <mi>x</mi> <msub> <mi>x</mi> <mi>max</mi> </msub> </mfrac> <mo>)</mo> </mrow> <mo>*</mo> <mi>cos</mi> <mrow> <mo>(</mo> <mfrac> <mrow> <mn>2</mn> <mo>*</mo> <mi>k</mi> <mo>*</mo> <mi>&pi;</mi> </mrow> <msub> <mi>x</mi> <mi>max</mi> </msub> </mfrac> <mo>*</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow>其中A为振荡曲线的最大振幅,xmax为振荡曲线的最大振荡时间,k为在变形仿真中决定皱褶个数;3)计算表面积保持:为保持基础网格变形前后的表面积不变,通过振荡曲线调整网格顶点位置,使顶点列弯曲状态下的总长度等于拉直状态的总长度,基础网格的每一顶点列共用一条阻尼振荡曲线,曲线从中间向两端对称延伸,其长度计算公式表示为: <mrow> <mi>length</mi> <mo>=</mo> <mn>2</mn> <mo>*</mo> <msubsup> <mo>&Integral;</mo> <mn>0</mn> <msub> <mi>X</mi> <mi>max</mi> </msub> </msubsup> <msqrt> <mn>1</mn> <mo>+</mo> <msup> <mi>f</mi> <mo>&prime;</mo> </msup> <msup> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> <mn>2</mn> </msup> </msqrt> <mi>dx</mi> </mrow>其中,f′(x)为阻尼振荡曲线函数的微分,Xmax为最大振荡时间,即该顶点列的圆弧半长度Xmax=height*Scale/2;由于振荡曲线函数的微分形式复杂,为简化积分,将按间隔划分压缩系数空间,根据顶点列在变形前后的总长度不变的条件,即length=height,采用数值方法求得每个压缩系数所对应的阻尼曲线最大振幅A;根据顶点的高度调整值调节基础网格顶点的位置,变形基础网格的每个顶点列在变形过程中保持长度不变,从而实现整个基础网格表面中变形中保持表面积不变;步骤五:合成网格将步骤二生成的细节网格和步骤四生成的褶皱变形基础网格进行合成,获得几何模型的变形结果,绘制变形网格;其主要计算过程如下:1)合成褶皱变形基础网格和细节网格,其过程是分离的反向运算;由于基础网格是规则网格,而原始网格一般是不规则网格,为使两网格的顶点一一对应,使用三线性插值方法从变形后基础网格中获得投影点的坐标,针对细节网格的每一顶点,均采样其对应的基础网格坐标,然后叠加网格细节值;2)实时绘制网格变形效果。
地址 100081 北京市海淀区中关村南大街5号