基于自然手势的虚拟数字雕塑方法与流程

文档序号:11133605阅读:620来源:国知局
基于自然手势的虚拟数字雕塑方法与制造工艺

本发明属于自然人机交互领域,特别涉及一种基于自然手势的虚拟数字雕塑方法。



背景技术:

随着先进的数字化仪器及设备不断投入实际应用,计算机辅助下的三维建模技术已经发展到包括三维扫描仪、基于图像的建模与绘制(IBMR)等多种方法在内的三维建模,而且计算机辅助设计系统功能越来越强大,但是其使用门槛也越来越高,操作也来越复杂,用户需要费尽周折才能将自己的三维思路准确地传达给计算机,很大程度限制了设计者的设计想法。传统的三维建模主要是通过三维建模软件如3DMax、Maya和犀牛等来完成,他们的强大不可置否,初学者必须要花费一定的精力才能掌握如何建模,门槛较高,而且操作者也不容易将自己的想法给清晰的表达出来,而且上手后完成一个较为美观的模型的时间也常常需要几个小时,国外也有一些通过VR 和AR来进行三维建模,但是所建出来的模型往往过于简单,实用性不高。3D打印机在日常生活运用十分普遍,然而却很难推广开来,其中最关键的原因有两点:一是三维建模软件的入门比较困难,非相关专业的人需要花费很大精力去学习如何使用建模软件;二是三维建模软件难以表达清楚人们心中所想物体的形状,特别是一些细节方面,往往人们心中所想的和软件所画出来的相差很大。所以进一步优化和强大虚拟雕塑的变形等功能正是人们理想的实现方式。

在人体的各个器官中,手是最灵活的,人们可以根据心中的想法比划出各种各样的手势。就好比一个雕刻家手中拿着刻刀可以轻易的刻出物体的外形,但根据国内外形势,国内的3D建模软件功能强大却需要耗费人们大量的时间学习和熟练软件;而国外的各种轻量化设计性研究已得到迅速实现但是所能建立的模型较为简单。针对以上情况,注重进一步优化和强大虚拟雕塑功能,实现自然的人机交互模式同时精细雕塑效果。建立一种比智能空间更为自然、有效的、具有高度流动性的手势虚拟雕塑。基于以上两个现象,我们试想着将其优势互补。通过自然的手势利用Leap motion 在计算机上进行虚拟雕塑,并进行快速三维建模,然后结合3D打印机把模型打印出来。这样就解决了目前三维建模困难的问题,使得3D打印机可以面向大众,且门槛低、易推广。



技术实现要素:

此发明提出了允许使用者通过自然的手势在电脑中进行虚拟雕塑的方法,此方法使用了基于leap Motion非接触式设备的自然人机交互接口,可以令使用者直观地进行虚拟雕塑及实时观察到雕塑的结果反馈。

本发明的目的通过如下技术方案实现。

基于自然手势的虚拟数字雕塑方法,包括如下步骤:

S1、手势位置获取,手势位置通过Leap Motion 来获取得到;

S2、虚拟雕塑建模;

S3、模型变形,在进行虚拟雕塑的任务工作时有两个主要模型,一个是已构建好等待雕塑的模型,一个是由Leap Motion获取关节坐标构建的虚拟手模型;当人手在Leap Motion下运动进而控制虚拟手与固定的等待雕塑模型发生轻微碰撞,碰撞处检测以三维空间三角形与三角形相交的算法判断有无交点,与交点交线位置,再根据碰撞深度的计算,利用虚拟雕塑变形算法进而将相交点位置坐标进行实时修改,从而实现雕塑变形效果。

进一步地,所述步骤S1包括以下步骤:

手势位置的数据是通过Leap Motion 来获取得到,虚拟雕塑需要用到的是手指来进行雕塑的,因此,我们需要获取手指的相关数据,每只手可以获得5个手指的数据,5个手指分别为:

(1)拇指(Thumb finger)

(2)食指(Index finger)

(3)中指(Middle finger)

(4)无名指(Ring finger)

(5)小拇指(Pinky finger)

每个手指可以获取其初始位置start(X,Y,Z),终止位置end(X,Y,Z)和方向direction(pitch, roll, yaw)。

对每个手指进行细分,可以分为如下四个关节:

(1)掌骨Metacarpal bone

(2)近端骨Proximal bone

(3)中间骨Middle bone

(4)远端骨Distal bone

对每一个关节,也可以获取其初始位置start(X,Y,Z),终止位置end(X,Y,Z)和方向direction(pitch, roll, yaw)。

有了以上的数据,我们可以得到手的位置,由于Leap Motion 获取手势数据也存在着一定的误差,抗干扰性不是很强,所以我们会利用混合卡尔曼滤波来对手势数据进行融合,这样手势数据的精确性就提高了很多,可以用于接下来的手势模型搭建。

进一步地,所述步骤S2包括以下步骤:

(1)利用3DMAX构建出表示人手关节的圆柱体,转换为OpenSceneGraph中后缀为.osg的节点模型以便用于场景的处理。随后利用Leap Motion来获取人手的各个关节的相应坐标,在Leap Motion的API中,人手的关节识别中将手指分成了17部分,分别是尾指的掌骨(Metacarpals)、近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、无名指的掌骨(Metacarpals)、近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、中指的掌骨(Metacarpals)、近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、食指的掌骨(Metacarpals)、近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、拇指的近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)(拇指的掌骨长度置为0),所以在OpenSceneGraph中需要用17个圆柱体来构建人手的模型

(2)由于Leap Motion中的坐标系与OpenSceneGraph中的坐标系不同,在由leap motion在传入坐标时需要进行转换。Leap Motion采用的坐标系时以相对设备水平的方向为X轴,右边为正轴,相对设备垂直的方向为Y轴,向上为正轴,在水平面与X轴垂直的方向为Z轴,以指向使用者的方向为正轴,而在OpenSceneGraph以视窗水平的方向为X轴,右边为正轴,视窗设备垂直的方向为Z轴,向上为正轴,在水平面与X轴垂直的方向为Y轴,以指向使用者的方向为正轴,因此在OpenSceneGraph中采用传入的坐标数据时需要将传入的Y轴和Z轴的数据相互交换。在OpenSceneGraph中创建一个Group指针作为根节点,使用内带的矩阵转换函数与传入的坐标结合处理各个圆柱体,再分别将17个圆柱体作为node加入到根节点中,使用osg::Viewer将其显示在场景中。

(3)在构建完虚拟手后,还需要对虚拟雕塑用泥进行构建,由于现实生活中雕塑用泥一般不定形,因此在使用中提供虚拟泥的预设模型,即利用3dmax构建出长方体,正方体,圆柱,球体作为预设。

进一步地,所述步骤S3包括以下步骤:

在进行虚拟雕塑的任务工作时有两个主要模型,一个是以构建好等待雕塑的模型,一个是由Leap Motion获取关节坐标构建的虚拟手模型。当人手在Leap Motion下运动进而控制虚拟手与固定的等待雕塑模型发生轻微碰撞,碰撞出检测以三维空间三角形与三角形相交的算法判断有无交点,与交点交线位置,再根据碰撞深度的计算,利用虚拟雕塑变形算法进而将相交点位置坐标进行一定实时修改,从而实现雕塑变形效果。过程中涉及的主要碰撞检测算法与虚拟雕塑变形算法如下详述。

三维空间两个三角形碰撞检测算法如下:

(1)假定三维空间有ABC与PQR,以ABC所在平面为基准,建立该平面法线,其中,由三角形ABC所在平面(定为*0)划分的空间中,为正向的空间为*1,为负向的空间为*2,详见附图1。

(2)根据三角形PQR的点P,点Q,点R各自所在空间领域(*1/*2/*0)的判断,分析碰撞情况。利用分别与,,的向量内积的正负值判断所在空间领域(*1/*2/*0)。

a)如果点P,点Q,点R三点均在*1或*2,则ABC与PQR不可能相交;

b)如果点P,点Q,点R中存在点在*0,则ABC与*0肯定相交,ABC与PQR可能相交:

b1)该交点在ABC,则碰撞点即为该交点;

b2)否则,继续c)步判断。

c)如果点P,点Q,点R三点不全在*0或*1或*2,则ABC与*0肯定相交,根据交线与面*0的相似三角形构建,向量投影求出ABC与*0的交点(详见附图2):

c1)该交点在ABC,则碰撞点即为该交点;

c2)否则,无碰撞点。

(3)判断点是否在已知三角形算法分析如下。建立附图3,XYZ,点A在XYZ上,点B在外。

对于在XYZ的点有如下特征:

选取XY边,A,Z两点在同一侧;选取XZ边,A,Y两点在同一侧;选取YZ边,A,X两点在同一侧。

其中,附图3,涉及点是否在已知平面交点获取方法:

,,

例如PQ与*0交点F计算如下:

其中:

<二>雕塑变形算法的过程如附图4所示,当手指不断的向雕塑靠近时,根据碰撞算法可以检测出手指面和雕塑面是否产生碰撞,如果产生碰撞了,则可以计算出所有的碰撞点。对于每一个碰撞点,在产生碰撞之后,都必须要朝某一个方向偏移一定的距离,从而使得雕塑面产生一定的形变。

假设为其中一个碰撞点,为碰撞面上距离最近的一个点,则点的碰撞距离可以被定义如下:

(1)

点的运动方向可以被定义如下:

(2)

有了碰撞距离和运动方向,就可以将点进行相应的偏移。将所计算出的每一个碰撞点都按照这种方式进行偏移,则雕塑就可以实现变形的功能。

本发明相对于现有技术具有如下的优点及效果:

这个发明提出了一种允许操作者通过三维的手势动作来在计算机OSG平台上完成虚拟雕塑任务。这种基于Leap Motion的接口获取更加准确的关节坐标实现自然的人机交互,运用到三维建模雕塑上,摆脱过多的物理装置的限制。

附图说明

图1是碰撞检测两三角形的空间图;

图2是空间上交线与面求交点示意图;

图3是点是否在三角形示意图;

图4是手指面和雕塑面产生碰撞图。

具体实施方式

下面结合实施例对本发明作进一步详细的描述,但本发明的实施方式不限于此,以下若有未特别详细说明之处,均是本领域技术人员可参照现有技术实现的。

本实例基于自然手势的虚拟数字雕塑实现方法包括如下步骤:

S1、手势位置获取

S2、虚拟雕塑建模

S3、模型变形。

所述步骤S1包括以下步骤:

手势位置的数据是通过Leap Motion 来获取得到,虚拟雕塑需要用到的是手指来进行雕塑的,因此,我们需要获取手指的相关数据,每只手可以获得5个手指的数据,5个手指分别为:

(1)Thumb finger

(2)Index finger

(3)Middle finger

(4)Ring finger

(5)Pinky finger;

每个手指可以获取其初始位置start(X,Y,Z),终止位置end(X,Y,Z)和方向direction(pitch, roll, yaw)。

对每个手指进行细分,可以分为如下四个关节:

(1)Metacarpal bone

(2)Proximal bone

(3)Middle bone

(4)Distal bone;

对每一个关节,也可以获取其初始位置start(X,Y,Z),终止位置end(X,Y,Z)和方向direction(pitch, roll, yaw)。

有了以上的数据,我们可以得到手的位置,由于Leap Motion 获取手势数据也存在着一定的误差,抗干扰性不是很强,所以我们会利用混合卡尔曼滤波来对手势数据进行融合,这样手势数据的精确性就提高了很多,可以用于接下来的手势模型搭建。

所述步骤S2包括以下步骤:

(1)利用3DMAX构建出表示人手关节的圆柱体,转换为OpenSceneGraph中后缀为.osg的节点模型以便用于场景的处理。随后利用Leap Motion来获取人手的各个关节的相应坐标,在Leap Motion的API中,人手的关节识别中将手指分成了17部分,分别是尾指的掌骨(Metacarpals)、近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、无名指的掌骨(Metacarpals)、近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、中指的掌骨(Metacarpals)、近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、食指的掌骨(Metacarpals)、近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、拇指的近侧指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)(拇指的掌骨长度置为0),所以在OpenSceneGraph中需要用17个圆柱体来构建人手的模型

(2)由于Leap Motion中的坐标系与OpenSceneGraph中的坐标系不同,在由leap motion在传入坐标时需要进行转换。Leap Motion采用的坐标系时以相对设备水平的方向为X轴,右边为正轴,相对设备垂直的方向为Y轴,向上为正轴,在水平面与X轴垂直的方向为Z轴,以指向使用者的方向为正轴,而在OpenSceneGraph以视窗水平的方向为X轴,右边为正轴,视窗设备垂直的方向为Z轴,向上为正轴,在水平面与X轴垂直的方向为Y轴,以指向使用者的方向为正轴,因此在OpenSceneGraph中采用传入的坐标数据时需要将传入的Y轴和Z轴的数据相互交换。在OpenSceneGraph中创建一个Group指针作为根节点,使用内带的矩阵转换函数与传入的坐标结合处理各个圆柱体,再分别将17个圆柱体作为node加入到根节点中,使用osg::Viewer将其显示在场景中。

(3)在构建完虚拟手后,还需要对虚拟雕塑用泥进行构建,由于现实生活中雕塑用泥一般不定形,因此在使用中提供虚拟泥的预设模型,即利用3dmax构建出长方体,正方体,圆柱,球体作为预设。

所述步骤S3包括以下步骤:

在进行虚拟雕塑的任务工作时有两个主要模型,一个是以构建好等待雕塑的模型,一个是由Leap Motion获取关节坐标构建的虚拟手模型。当人手在Leap Motion下运动进而控制虚拟手与固定的等待雕塑模型发生轻微碰撞,碰撞出检测以三维空间三角形与三角形相交的算法判断有无交点,与交点交线位置,再根据碰撞深度的计算,利用虚拟雕塑变形算法进而将相交点位置坐标进行一定实时修改,从而实现雕塑变形效果。过程中涉及的主要碰撞检测算法与虚拟雕塑变形算法如下详述。

<一>过程中主要三维空间两个三角形碰撞检测算法如下:

(1)假定三维空间有ABC与PQR,以ABC所在平面为基准,建立该平面法线,其中,由三角形ABC所在平面(定为*0)划分的空间中,为正向的空间为*1,为负向的空间为*2,详见附图1。

(2)根据三角形PQR的点P,点Q,点R各自所在空间领域(*1/*2/*0)的判断,分析碰撞情况。利用分别与,,的向量内积的正负值判断所在空间领域(*1/*2/*0)。

c)如果点P,点Q,点R三点均在*1或*2,则ABC与PQR不可能相交;

d)如果点P,点Q,点R中存在点在*0,则ABC与*0肯定相交,ABC与PQR可能相交:

b1)该交点在ABC,则碰撞点即为该交点;

b2)否则,继续c)步判断。

c)如果点P,点Q,点R三点不全在*0或*1或*2,则ABC与*0肯定相交,根据交线与面*0的相似三角形构建,向量投影求出ABC与*0的交点(详见附图2):

c1)该交点在ABC,则碰撞点即为该交点;

c2)否则,无碰撞点。

(3)判断点是否在已知三角形算法分析如下。建立附图3,XYZ,点A在XYZ上,点B在外。

对于在XYZ的点有如下特征:

选取XY边,A,Z两点在同一侧;选取XZ边,A,Y两点在同一侧;选取YZ边,A,X两点在同一侧。

其中,附图3,涉及点是否在已知平面交点获取方法:

,,

例如PQ与*0交点F:

<二>雕塑变形算法的过程如附图4所示,当手指不断的向雕塑靠近时,根据碰撞算法可以检测出手指面和雕塑面是否产生碰撞,如果产生碰撞了,则可以计算出所有的碰撞点。对于每一个碰撞点,在产生碰撞之后,都必须要朝某一个方向偏移一定的距离,从而使得雕塑面产生一定的形变。

假设为其中一个碰撞点,为碰撞面上距离最近的一个点,则点的碰撞距离可以被定义如下:

(1)

点的运动方向可以被定义如下:

(2)

有了碰撞距离和运动方向,就可以将点进行相应的偏移。将所计算出的每一个碰撞点都按照这种方式进行偏移,则雕塑就可以实现变形的功能。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1