在生命周期中虚拟世界
对象,可以为所有可用的虚拟世界节点及其字段设置新值vrnode
通过这种方式,您可以在MATLAB中更改和控制虚拟世界的自由度®环境
类型为虚拟世界
包含使用DEF语句在虚拟世界3D文件中命名的节点。这些节点的类型为vrnode
。有关详细信息,请参阅虚拟世界
和vrnode
功能。
在你打开一个虚拟世界
对象时,可以获得虚拟世界中可用节点的列表。本程序使用虚拟世界
对象我的世界
和虚拟世界vrmount.wrl
例如,创建我的世界
看见为虚拟世界创建vrworld对象.
在MATLAB命令窗口中,键入
节点(myworld);
MATLAB命令窗口显示列表的vrnode
对象及其字段可以从万博1manbetx®三维动画™软件。
隧道(变换)(我的第一个虚拟世界)路(形状)(我的第一个虚拟世界)桥(形状)(我的第一个虚拟世界)河(形状)(我的第一个虚拟世界)ElevApp(外观)(我的第一个虚拟世界)运河(形状)(我的第一个虚拟世界)木(集团)(我的第一个虚拟世界)Tree1(集团)(我的第一个虚拟世界)轮(形状)[我的第一次[我的第一个虚拟世界]VPfollow(视点)[我的第一个虚拟世界]Camera_car(变换)[我的第一个虚拟世界]View1(视点)[我的第一个虚拟世界]
类型
mynodes=get(myworld,'Nodes')
MATLAB软件创建了一组vrnode
对象对应于虚拟世界节点和显示器
mynodes=vrnode对象:13乘1隧道(变换)[我的第一个虚拟世界]道路(形状)[我的第一个虚拟世界]桥梁(形状)[我的第一个虚拟世界]河流(形状)[我的第一个虚拟世界]电梯(外观)[我的第一个虚拟世界]运河(形状)[我的第一个虚拟世界]木材(组)[我的第一个虚拟世界]树1(组)[我的第一个虚拟世界]轮子(形状)[我的第一个虚拟世界]汽车(变换)[我的第一个虚拟世界]VPfollow(视点)[我的第一个虚拟世界]相机车(变换)[我的第一个虚拟世界]视图1(视点)[我的第一个虚拟世界]
类型
谁
MATLAB命令窗口显示消息
Name Size Bytes Class ans 1x1 132 vrfigure object mynodes 13x1 3564 vrnode object myworld 1x1 132 vrworld object
现在您可以获得节点特征并为某些节点属性设置新值。例如,你可以通过使用来改变汽车的位置汽车用品
,这是虚拟世界中的第四个节点。
访问汽车用品
通过键入
fields(myworld.Automobile)
或
字段(mynodes (10));
MATLAB命令窗口显示有关汽车用品
节点。
字段访问类型同步--------------------------------------------addChildren事件在MFNode中关闭removeChildren事件在MFNode中关闭子级公开字段MFNode偏离中心公开字段SFVec3f偏离旋转公开字段SFVec3f偏离缩放公开字段SFVec3f偏离缩放方向公开字段SFVec3f偏离平移公开字段d SFVec3f关闭bboxCenter字段SFVec3f关闭bboxSize字段SFVec3f关闭
这个汽车用品
节点的类型为变换
。此节点允许您通过更改其位置来更改其位置翻译
字段值。从列表中,你可以看到翻译
需要三个值,表示对象的[x y z]坐标。
类型
视图(myworld)
默认查看器打开并显示虚拟世界vrmount.wrl
.
并排移动MATLAB窗口和浏览器窗口,以便可以同时查看这两个窗口
myworld.Automobile.translation=[15 0.25 20];
MATLAB为系统设置了一个新的位置汽车用品
节点。您可以观察到汽车已在虚拟世界浏览器窗口中重新定位。
您可以使用该函数更改列出的节点字段vrnode / setfield
.
注
点表示法是访问节点的首选方法。
读取可读字段的值(或暴露场
或出事件
),首先将该字段与vrnode/sync
方法。同步完成后,场景中的字段每次发生变化,主机上的字段值都会更新。属性读取字段的值vrnode/getfield
方法或使用点表示法直接访问字段值。
虚拟场景磁悬浮模型的例子,磁悬浮列车
,包含一个平面传感器(带有DEF
名称“Grab_Sensor”
).planessensor被附加到球的几何形状上,以记录你使用鼠标抓取球时向上或向下移动球的尝试。示例使用了传感器字段绞肉
和最大位置
限制在其他方向的移动。您可以使用传感器平移字段的输出作为球位置控制器的新设定点。您可以将传感器输出值读入MATLAB变量设定点。
创建vrworld对象并打开世界。
wh=vrworld(“磁悬浮列车,谢谢”)开放式;
获取节点句柄。
nh = vrnode (wh,“Grab_Sensor”);
同步翻译字段。
同步(nh,“翻译”,“开”);
使用以下三个选项之一读取同步字段值:
设定值=getfield(nh,“翻译”);选点= nh.translation;选点= wh.Grab_Sensor.translation;
对象的旋转和平移值变换
对象相对于该对象的父对象在局部坐标中指定。万博1manbetx仿真软件3 d动画提供两个扩展,用于将旋转和平移值转换为全局坐标:rotation_abs
和翻译
.若要访问这些全局坐标,请在平移或旋转字段中使用点符号,并添加_abs
到字段名。这个例子展示了局部坐标和全局坐标之间的差异:
w=vrview(“vrmanipul.wrl”);n=get(w,“节点”);n = w.Grip_Reference;n.translation n.translation_abs
Ans = 0 -0.1000 0 -3.0406 -3.0000 2.3334