一、前言
VRML(Virtual Reality Modeling Language,虚拟现实建模语言)是诞生于二十世纪九十年代的一种三维造型和渲染的图形描述型建模语言。VRML虚拟现实建模语言可以在网络上创建逼真的三维虚拟场景,它改变了网络上2D画面的状态,并能实现3D动画及交互效果,特别是改变了当前网络与用户交互的局限性,使得人机交互更加方便、灵活,使虚拟世界的真实性、交互性和动态性得到更充分的体现。概要地说,VRML具有以下四大特点,即强大的网络接入功能;丰富的多媒体集成功能;强大、快捷的三维立体造型和场景创建;人工智能(感知)功能。
在构造简易机器人实体的三维造型过程中,首要的任务是如何按照合理、有效的方法分解、简化实体造型过程。下面以VRML为开发平台,介绍利用PROTO原型、Box(立方体)、Cylinder(圆柱体)、Cone(圆锥体)、Sphere(球体)几何节点和IndexedFaceSet面集合节点构造机器人虚拟三维造型的方法。
二、造型分析
1.总体分析
对于机器人实体的VRML三维仿真模拟工作,其首要任务是进行实体结构分解,依据每一部分的造型特点选取相应的造型节点或者方法进行程序实现。通常,机器人实体大致可以分为如下3个部分:头部、躯干和四肢。其中,头部的主要组成为装饰帽、脸、眼、嘴和颈部;躯干是一个复杂的不规则六面体造型;四肢可细分为上肢和下肢。该机器人造型的结构设计简图如图1所示。
图1 机器人造型结构设计简图
2.详细分析
依据上面的分析工作,接下来按照各个组成部分的特点选择相应的造型节点或方法逐一设计实现。
(1)头部造型中,装饰帽可视为圆锥体造型;脸部和颈部视为圆柱体造型(图1中P1和P2所示);眼和嘴则可以看作是球体造型(图1中P5所示)。这部分造型涉及的VRML节点为Cylinder、Cone和Sphere节点。
(2)躯干部是一个复杂的6面空间几何体(图1中P0所示),它可以通过VRML中的IndexedFaceSet节点设计完成。
(3)四肢造型中,2个上肢可视为圆柱体造型和球体造型的组合(图1中P3和P4所示);下肢则是2个立方体造型的组合(图1中P6和P7所示)。这部分造型涉及的节点为Cylinder和Sphere。
三、造型设计
1.定义原型
在构造三维实体过程中,有很多造型部分的程序实现需要用到相同的造型节点。为简化设计的工作量,可以为重复使用率较高的造型建立(或定义)原型。VRML中,可使用PROTO定义原型,PROTO的语法结构如下:
PROTO 原型名称 [ 数据类型定义 ] {节点体} |
在机器人的三维造型中,较重要的、需要定义原型的有4个:圆柱体造型(原型命名为Part)、圆锥体造型(原型命名为Cap)、球体造型(原型命名为Rud)和六面体造型(原型命名为Body)。
(1)圆柱体原型Part定义
VRML中,geometry域的Cylinder节点用于创建圆柱体几何造型。Cylinder节点的语法结构如下:
Cylinder { |
|
|
|
|
Height |
2.0 |
SFFloat |
|
Radius |
1.0 |
SFFloat |
|
…… |
||
} |
|
|
|
其中,主要的域功能如下:
① Radius域:定义圆柱体造型的上下面半径;
② Height域:定于圆柱体造型的高。
圆柱体原型的属性赋值和程序描述如下:
PROTO Part [
field SFColor Color 100 100 100
field SFVec3f Position 0 0 0
field SFRotation Rot 0 0 0 0
field SFFloat Height 1
field SFFloat Radius 1
]
{
Transform {
translation IS Position
rotation IS Rot
children [
Shape {
appearance Appearance {
material Material {
diffuseColor IS Color
}
}
geometry Cylinder {
height IS Height
radius IS Radius
}
}
]
}
}
圆柱体原型运行效果如图2所示。
图2 圆柱体原型运行效果
(2)圆锥体原型Cap定义
VRML中,geometry域的Cone节点用于创建圆锥体几何造型。Cone节点的语法结构如下:
Cone { |
|
|
|
|
Height |
2.0 |
SFFloat |
|
BottomRadius |
1.0 |
SFFloat |
|
…… |
||
} |
|
|
|
其中,主要的域功能如下:
① Height域:定于圆锥体造型底部到锥顶的垂直高度;
② BottomRadius域:定义圆锥体造型底面半径。
圆锥体原型的属性赋值和程序描述如下:
PROTO Cap [
field SFColor Color 100 0 0
field SFVec3f Position 0 0 0
field SFRotation Rot 0 0 0 0
field SFFloat Height 1
field SFFloat Radius 1
]
{
Transform {
translation IS Position
rotation IS Rot
children [
Shape {
appearance Appearance {
material Material {
diffuseColor IS Color
}
}
geometry Cone {
height 0.5
bottomRadius 0.5
}
}
]
}
}
圆锥体原型运行效果如图3所示。
图3 圆锥体原型运行效果
(3)球体原型Rud定义
VRML中,geometry域的Sphere节点用于创建球体几何造型。Sphere节点的语法结构如下:
Sphere { |
|
|
|
|
Radius |
1.0 |
SFFloat |
|
…… |
||
} |
|
|
|
Radius域规定以原点为圆心的球体半径。球体原型的属性赋值和程序描述如下:
PROTO Body [
field SFColor Color 0 0 1
field SFVec3f Position 0 0 0
field SFRotation Rot 0 0 0 0
field SFVec3f Size 1 1 1
field SFVec3f size 2 2 2
]
{
Transform {
translation IS Position
rotation IS Rot
children [
Shape {
appearance Appearance {
material Material {
diffuseColor IS Color
}
}
geometry Box {
size IS size
}
}
]
}
}
球体原型运行效果如图4所示。
图4 球体原型运行效果
(4)立方体原型Body定义
VRML中,geometry域的Box节点用于创建立方体几何造型。Box节点的语法结构如下:
Box { |
|
|
|
|
Size |
2.0 2.0 2.0 |
SFVec3f |
|
…… |
||
} |
|
|
|
Size域规定立方体沿X,Y,Z三个坐标轴方向的边长大小。立方体原型的属性赋值和程序描述如下:
PROTO Body [
field SFColor Color 0 0 1
field SFVec3f Position 0 0 0
field SFRotation Rot 0 0 0 0
field SFVec3f Size 1 1 1
field SFVec3f size 2 2 2
]
{
Transform {
translation IS Position
rotation IS Rot
children [
Shape {
appearance Appearance {
material Material {
diffuseColor IS Color
}
}
geometry Box {
size IS size
}
}
]
}
}
立方体原型运行效果如图5所示。
图5 立方体原型运行效果
(5)躯干造型设计
在机器人三维造型中,其躯干造型是一个复杂的(或者非常规的几何体)。复杂几何体则由VRML的一系列空间点按照一定关系构建的平面以及平面的集合构成,创建的各个面由各顶点确定。VRML中构造空间复杂几何体时,可以通过IndexedFaceSet节点完成。IndexedFaceSet是VRML中Shape节点的geometry域的域值。IndexedFaceSet节点共有14个域,共同决定构建面集合的形状以及材质等属性特征。IndexedFaceSet节点的语法结构如下:
IndexedFaceSet { |
|
|
|
|
Coord |
NULL |
SFNode |
|
CoordIndex |
[ ] |
MFInt32 |
|
texCoord |
NULL |
SFNode |
|
texCoordIndex |
[ ] |
MFInt32 |
|
…… |
||
} |
|
|
|
1) Point域
Point节点作为IndexedFaceSet面集合节点,是多域值三维向量型,它提供一个三维坐标列表,用于指定一个或一组空间点的X,Y,Z坐标值。
2)Coord域
Coord域用来提供空间平面多边形顶点的坐标。Coord的域值是Coordinate节点,由Coordinate节点的Point域给出点坐标的列表。空间点坐标列表 按照前后顺序满足 。
3)CoordIndex域
CoordIndex域的索引值指明如何连结各顶点以形成线段,其中的Coordinate节点的Point域的坐标列表是一个索引列表,按给定的索引顺序连结坐标点形成空间的多边形。索引值为-1时,表明当前连结的线段已经结束,下一个线段将开始。
4)texCoord域
texCoord域包含一个TextureCoordinate节点,指明将纹理图案映射到面集合表面上。IndexedFaceSet所构建的表面可以通过贴图添加表现力。
5)texCoordIndex域
texCoordIndex域提供对应TextureCoordinate节点的索引列表。
设Point域的域值为 ,共8个域值三维向量;CoordIndex域的索引值为 ,共6个索引项。Point域和CoordIndex域对六面体造型的具体构造如下:
;
图6 六面体造型各顶点空间位置
六面体造型运行效果如图7所示。
图7 机器人躯干造型运行效果
以上即对机器人造型的各关键组成的设计实现。在造型中,对各原型按照准确的空间位置进行重复使用、组合(详细代码请查看源程序),机器人的三维仿真造型效果如图7(图7-1为正面效果,图7-2为侧面效果)所示。
图7—1 机器人正面效果 图7—2机器人侧面效果
图7 基于VRML的机器人造型运行效果
四、结语
通过机器人三维造型的设计实例,详细介绍了利用VRML实现类人形造型的程序实现方法。其中的关键步骤是造型的分解、原型的定义和复杂造型的构造。另外,在构造机器人三维造型过程中,还可以根据需要适当修改各造型元素的空间位置和材质,实现造型的不同形态效果;也可以添加相应的传感器(节点),实现与浏览者的交互。
【本文为转载的,因不知原作者姓名和出处,所以未道明。但是基于知识产权保护,特此声明。】