本节包括以下内容:[大谦MATLAB,dqmatlab点com]
打开虚拟世界——打开一个虚拟世界并扫描它的结构。
与虚拟世界进行交互——为可以获取的虚拟世界节点和它们的字段设置新值。
关闭和删除vrworld对象——关闭打开的虚拟世界并将它们从内存中删除。
1.打开虚拟世界
通过打开虚拟世界,可以在VRML查看器中查看虚拟世界,扫描它的结构并从MATLAB命令窗口中改变虚拟世界的属性。
创建vrworld对象以后,可以用与该虚拟世界相连的vrworld对象打开虚拟世界。下面打开与虚拟世界vrmount.wrl相连的vrworld对象myworld。
(1)在MATLAB命令窗口输入
>> open(myworld);
MATLAB打开虚拟世界vrmount.wrl。
(2)输入
>> set(myworld, 'Description', 'My first virtual world');
描述属性变为“My first virtual world.”。这个描述显示在所有的虚拟现实对象列表中,显示在Simulink三维动画模块查看器的标题条中和Simulink三维动画模块HTML页上虚拟世界的列表中。
(3)打开Web浏览器。在域名窗口中输入
http://localhost:8123
浏览器通过用一个与“My first virtual world”的链接显示Simulink三维动画模块HTML页。如图4-1所示。数字8123是默认的Simulink三维动画模块端口号。该端口号可以改变。
图4-1 用浏览器显示虚拟世界
如果该Web浏览器支持VRML和X3D,在浏览器窗口中单击“My first Virtual world.”。浏览器中将显示虚拟世界vrmount.wrl。在浏览器中打开该虚拟世界,如图4-2所示。
图4-2 打开虚拟世界
另外,也可以用命令view(myworld)显示虚拟世界,它将虚拟场景显示在默认的查看器中。
2.与虚拟世界交互
可以用vrnode对象方法将所有可以获取的虚拟世界节点和它们的字段设置为新值。利用这个方法,可以在MATLAB环境中改变和控制虚拟世界的自由度。
vrworld类型的对象包含有多个节点,这些节点是vrnode类型的,在VRML文件中用DEF语句进行命名。
打开vrworld对象以后,就可以获取虚拟世界中可用的节点列表。下面利用vrworld对象myworld和虚拟世界vrmount.wrl进行演示。
(1)在MATLAB命令窗口输入
>> nodes(myworld);
MATLAB会显示vrnode对象及其字段的列表:
View1(Viewpoint) [My first virtual world]
Camera_car(Transform) [My first virtual world]
VPfollow(Viewpoint) [My first virtual world]
Automobile(Transform) [My first virtual world]
Wheel(Shape) [My first virtual world]
Tree1(Group) [My first virtual world]
Wood(Group) [My first virtual world]
Canal(Shape) [My first virtual world]
ElevApp(Appearance) [My first virtual world]
River(Shape) [My first virtual world]
Bridge(Shape) [My first virtual world]
Road(Shape) [My first virtual world]
Tunnel(Transform) [My first virtual world]
(2)输入
>> mynodes=get(myworld, 'Nodes')
MATLAB创建一个vrnode对象数组,这些对象对应于虚拟世界节点和显示。
mynodes=
vrnode object: 13-by-1
View1(Viewpoint) [My first virtual world]
Camera_car(Transform) [My first virtual world]
VPfollow(Viewpoint) [My first virtual world]
Automobile(Transform) [My first virtual world]
Wheel(Shape) [My first virtual world]
Tree1(Group) [My first virtual world]
Wood(Group) [My first virtual world]
Canal(Shape) [My first virtual world]
ElevApp(Appearance) [My first virtual world]
River(Shape) [My first virtual world]
Bridge(Shape) [My first virtual world]
Road(Shape) [My first virtual world]
Tunnel(Transform) [My first virtual world]
(3)输入
>> whos
MATLAB显示下面的信息:
Name Size Bytes Class
mynodes 13x1 5592 vrnode
myworld 1x1 184 vrworld
现在可以获取节点特征并给某些节点属性设置新值了。例如,可以用“Automobile”改变汽车的位置,“Automobile”是虚拟世界中的第4个节点。
(4)输入下面的语句,取得Automobile节点的字段。
>> fields(mynodes(4));
或者输入
>> fields(myworld.Automobile)
MATLAB显示下面的列表:
Field Access TypeSync
-----------------------------------------------------------
translation exposedFieldSFVec3foff
center exposedFieldSFVec3foff
bboxCenter field SFVec3foff
children exposedFieldMFNodeoff
scale exposedFieldSFVec3foff
bboxSize field SFVec3foff
removeChildren eventIn MFNodeoff
scaleOrientation exposedFieldSFRotationoff
rotation exposedFieldSFRotationoff
addChildren eventIn MFNodeoff
Automobile节点是Transform类型的。通过改变translation字段的值,可以改变该节点的位置。从上面的列表中,可以看出,translation字段需要3个值,分别表示对象的[x y z]坐标值。
(5)输入
>> view(myworld)
默认的查看器打开和显示虚拟世界vrmount.wrl,如图4-3所示。
图4-3 打开和显示虚拟世界vrmount.wrl
(6)并排移动MATLAB窗口和浏览器窗口,这样可以同时查看它们。在MATLAB窗口中输入
>> myworld.Automobile.translation=[15 0.25 20];
MATLAB给Automobile节点设置一个新的位置,可以发现,在VRML浏览器窗口中,汽车到了一个新的位置。
3.关闭和删除vrworld对象
完成一个阶段的操作以后,必须关闭所有打开的虚拟世界并将它们从内存中删除。用下面的命令关闭和删除虚拟世界myworld。
>> close(myworld);
>> delete(myworld);
这样,表示vrworld对象myworld的虚拟世界就从内存中删除了。所有与查看器和浏览器可能的连接都会关闭,并且虚拟世界的名称也从可获取虚拟世界名称列表中删除了。但是注意,关闭和删除一个虚拟世界并不将该虚拟世界对象的句柄从MATLAB工作空间中删除。