X3D和Java的虚拟现实人体运动仿真研究
string version ""
sequence<Object> viewpoints []
}
在HanimHumanoid节点中,对虚拟人的设计可以大体分为骨骼和皮肤的设计。其中skin域包含一个或多个有序的面,这些面由skinCoord和 skinNormal fields域定义。
Joint节点表示身体中的每个关节,定义了身体的每一段和与其相连的父层的关系,其父节点可能是HanimHumanoid节点也可能是Joint节点本身或者Segment节点。
Segment节点定义了身体的每个部分,它是一个组节点,它没有改变坐标系的能力,若想改变坐标,必须附在某个关节节点上。
Site节点实现了三个目标:第一是定义了反向动力学系统使用的“最终受动器”的位置。第二是定义了首饰后服装之类的附件的附着点。第三是定义了参考系统中的虚拟摄象机的位置。
Displacer对象,可用于三种不同的方法。第一它可以用来在别顶点相应的某一特定功能的网格。第二它可以用来描述替换顶点的各个方向来模拟精确的肌肉行动。第三描述一个完整的配置顶点。
3 、Java与X3D传感器的结合
X3D场景与用户的交互可以通过静态方式和动态方式实现,静态方式是使用X3D本身自带的节点实现的,比如传感器和检测器等,动态方式则是使用外部的逻辑程序实现,即使用JAVA程序。X3D中使用JAVA有两种方式,外部编程接口EAI和内部Script节点。Script节点就是利用Java或JavaScript语言编写的脚本来扩展X3D功能,它可以创建出新的内插节点和传感节点来驱动和控制整个虚拟空间。在Script节点的所有字段中,存在四种字段:field、eventIn、eventOut、exposedField。通过eventIn将事件传至Script节点中的脚本,然后在Script节点中的脚本中进行处理,最后再通过eventOut将结果送回Script节点。如图1所示,场景上方有三个按纽,将鼠标放在任何一个按纽上会出现下拉菜单,点击菜单场景中的沙发会发生相应的改变,
EAI是External Authoring Interface的简称,它是一种X3D与外部环境的创作接口,定义了一套针对X3D浏览器的Java类,通过这些类,外部程序可以访问当前所运行的X3D世界,从而在外部直接操作、控制和修改X3D世界内部的场景,这里的外部程序主要是指与X3D嵌在同一WEB页上的JavaApplet程序。在JavaApplet中建立Browser对象标识一个唯一的X3D场景,并由此获得对X3D场景中已定义节点的引用。JavaApplet既可以控制X3D场景,也能进行与HTML等其他媒体的交互以及网络控制,从而可以实现复杂的虚拟环境系统。
TimeSenor时间传感器节点的作用是创建一个虚拟的时钟,并对其他节点发送时间值,它通过向插补器节点输出事件,使插补器节点产生所需要的动画效果。
4、 结束语
通过X3D的人性化节点和Java,研究了虚拟人体的运动仿真,利用X3D的图形功能在人体仿真领域进行了初步的研究,为以后的人体仿真系统的研究奠定了理论基础。
参考文献
[1]http://h-anim.org/Specifications/H-Anim1.1/appendices.html#appendixa
[2]张金钊,张金锐,张金镝著,X3D虚拟现实设计—第二代立体网络程序设计实例[M],电子工业出版社,2008
[3]张金钊,张金锐,张金镝著,X3D虚拟现实设计—第二代立体网络程序设计语言[M],电子工业出版社,2007
[4]汪兴谦主编,VRML与Java编程实例[M],中国水利水电出版社,2002
作者简介:
杨眉,女,山东济宁人,1982年出生,青岛科技大学机电学院,硕士研究生,研究方向为虚拟现实技术的应用。
王展旭,男,山东金乡人,1962年出生,青岛科技大学机电学院,硕士生导师,研究方向为虚拟现实技术的应用。