主要内容

平面操纵使用空间鼠标MATLAB®对象

这个例子展示了如何通过MATLAB®接口使用空间鼠标。

在启动本示例后,在Simulink®3D动画™查看器中显示一个带有飞机的虚拟场景。金宝app你可以使用空间鼠标在场景中导航飞机。通过按下设备按钮1,可以在当前平面位置放置标记。

这个例子需要一个空间鼠标或其他兼容设备。

创建并初始化空间鼠标对象

本例中设备标识为USB1。如果您的设备使用不同的连接,请相应地设置ID。空格鼠标ID的有效值为:

COM1、COM2、COM3、COM4、USB1、USB2、USB3或USB4。

注意:如果Space Mouse未连接,则会打印警告信息。

ID =“USB1”;鼠标= [];试一试尝试创建空间鼠标对象鼠标= vrspacemouse (ID);我流('无法在端口%s上初始化空间鼠标'、身份证);结束
无法在端口USB1上初始化空间鼠标。

加载并查看虚拟世界

创建并打开vrworld对象w = vrworld (“vrtkoff_hud.x3d”“新”);开放(w);创建显示虚拟场景的vrfigure%使用适合用户导航的视点无花果= vrfigure (w,“观点”“坐飞机”);获取被操纵的飞机节点airpln = vrnode (w,“平面”);读取平面初始平移和旋转originalTranslation = airpln.translation;originalRotation = airpln.rotation;设置HUD显示文本抵消= vrnode (w,“HUDOffset”);偏移量。翻译=抵消。翻译+ [-0.15 1.9 0];hudtext = vrnode (w,“HUDText1”);hudstr = {'按下按钮'1'删除标记'...'按2'键复位平面位置'...'按1和2键退出'};hudtext。字符串= hudstr;vrdrawnow;

为轨迹标记添加一个EXTERNPROTO

从包含各种标记形状的VRML文件加载一个四面体形状的PROTO。

获取带有标记PROTOs的wrl文件的路径pathtomarkers = (“vr_markers.x3d”);%使用四面体形状MarkerName =“Marker_Tetrahedron”使用指定的标记创建一个EXTERNPROTO试一试addexternproto (w pathtomarkers MarkerName);%如果已包含所需的PROTO,则不抛出异常如果~ strcmpi (ME.identifier“sl3d:接口:protoexists”) throwAsCaller(我);结束结束

场景导航

交互式导航可以通过同时按下空间鼠标1和2按钮或关闭Simulink 3D动画查看器图形来完成。金宝app

如果~ isempty(鼠标)%迭代器,确保创建的标记具有惟一的DEF名称iterforname = 0;设置鼠标对翻译的灵敏度%越高的值对应越高的灵敏度鼠标。PositionSensitivity = 1飞行;设置鼠标旋转的灵敏度%越高的值对应越高的灵敏度鼠标。RotationSensitivity = 1 e-5;%读取空间鼠标的值并在一个周期内更新场景对象%重复,除非'1'和'2'按钮同时按下或数字关闭任何(button(MOUSE, [1 2]) == 0) && isvalid(fig) pause(0.01);%使用vrspacmouse /viewpoint方法来获取当前的平移和旋转V =观点(鼠标);将新的转换设置为飞机节点airpln。翻译= originalTranslation + [-1 1 -1].*V(1:3);%设置飞机节点的新旋转airpln。旋转= [-1 1 -1 1].*V(4:7);如果按钮(鼠标,1)== 1%如果按下鼠标按钮“1”创建一个新标记newMarker = vrnode(w, sprintf(“% s_ % d '“标记”iterforname) MarkerName);设置标记转换纽马克。markerTranslation = originalTranslation + [-1 1 -1].*V(1:3);%自增迭代器Iterforname = Iterforname + 1;结束如果按钮(鼠标,2)== 1%如果按下鼠标按钮'2',则重置平面位置并旋转airpln。翻译= originalTranslation;airpln。旋转= originalRotation;鼠标。初始位置= [0 0 0];鼠标。InitialRotation = [0 0 0];结束%重新绘制虚拟场景vrdrawnow;结束结束

清理

关闭vrfigure关闭(图);关闭vrworld关闭(w);清除所有已使用的变量清晰的ID鼠标w无花果airplnoriginalTranslationoriginalRotation抵消hudtexthudstr...pathtomarkersMarkerNameiterfornameV纽马克img_captureimg%显示示例消息的结束