Пример vrmemb показывает, как использовать сгенерированный 3-D графический объект MATLAB ® с 3D Animation™ Simulink ®. Знаменитая мембрана была сгенерирована функцией логотипа и сохранена в формате VRML с помощью стандартной функции MATLAB vrml. Таким образом можно сохранить все объекты Handle Graphics ® и использовать их с Simulink 3D Animation в качестве компонентов связанных виртуальных миров.
После запуска примера вы увидите панель управления с двумя ползунками и тремя флажками. Используйте ползунки для поворота и масштабирования мембраны во время использования флажков, чтобы определить, какая ось должна поворачиваться вокруг.
В сцене VRML интересно заметить текстовый объект. Является дочерним элементом узла VRML Billboard. Можно сконфигурировать этот узел так, чтобы его локальная ось Z поворачивалась, чтобы постоянно указывать на средство просмотра. Это может быть полезно для моделирования виртуальных панелей управления и головных отображений (HUD).
Начнем с создания объекта класса VRWORLD, который представляет виртуальный мир. Файл, составляющий мир, был ранее выполнен с использованием 3D World Editor, содержащегося в продукте Simulink 3D Animation. Имя файла MEMBRANE.x3d.
wh = vrworld('membrane.x3d');
Мембранный объект был сгенерирован с помощью функции 'logo' и сохранен в формате VRML с помощью функции 'vrml'. После некоторых незначительных изменений в редакторе VRML, он может непосредственно использоваться Simulink 3D Animation.
После запуска примера вы увидите панель управления с двумя ползунками и тремя флажками. Ползунки используются для поворота и масштабирования мембраны, в то время как флажки определяют, какая ось должна вращаться.
Мир должен быть открыт, прежде чем его можно будет использовать. Это достигается с помощью команды OPEN.
open(wh);
Для доступа к узлу VRML необходимо создать соответствующий объект VRNODE. Узел идентифицируется по своим именам и миру, к которому он принадлежит.
H.membrane = vrnode(wh, 'Membrane'); H.view1 = vrnode(wh, 'View1');
Диалоговое окно используется для интерактивного изменения значений полей узла VRML, на который ссылается только что созданный объект VRNODE.
figh = dialog('Position',[358 402 530 107], 'Name', 'Simulink 3D Animation Example', ... 'WindowStyle', 'normal', ... 'CloseRequestFcn', ... 'w = vrworld(''membrane.x3d''); close(w); try; delete(w); end; closereq');
uicontrol('Parent',figh, 'Position',[84 68 80 14], 'HorizontalAlignment','left', ... 'String','Rotation', 'Style','text'); H.rotation = uicontrol('Parent',figh, 'Style','slider', 'Position',[164 65 352 20], ... 'Min', 0, 'Max', 2*pi, ... 'Callback', ['cur_rot = get(H.rotation,''Value'');', ... 'cur_x = get(H.xaxis,''Value'');', ... 'cur_y = get(H.yaxis,''Value'');', ... 'cur_z = get(H.zaxis,''Value'');', ... 'if (cur_x || cur_y || cur_z)', ... ' H.membrane.rotation = [cur_x cur_y cur_z cur_rot];', ... 'end' ]);
H.zoom = uicontrol('Parent',figh, 'Style','slider', ... 'Position',[164 24 352 20], 'Value', 1, ... 'Callback', 'H.view1.fieldOfView = 0.25 + 0.55 * (1-get(H.zoom,''Value''));'); uicontrol('Parent',figh, 'Position',[84 27 80 14], 'String','Zoom', ... 'Style','text', 'HorizontalAlignment','left');
H.xaxis = uicontrol('Parent',figh, 'Position',[24 70 60 20], 'String','X', ... 'Style','checkbox'); H.yaxis = uicontrol('Parent',figh, 'Position',[24 42 60 20], 'String','Y', ... 'Style','checkbox'); H.zaxis = uicontrol('Parent',figh, 'Position',[24 14 60 20], 'String','Z', ... 'Style','checkbox', 'Value', 1); setappdata(figh, 'Handles', H);
Виртуальный мир можно просмотреть в Инструмент просмотра VRML. Simulink 3D Animation предлагает два способа просмотра виртуальных миров - внутренний средство просмотра (метод по умолчанию) и внешний средство просмотра (интегрированный с веб-браузером, доступный на некоторых платформах). Мы посмотрим виртуальный мир с помощью функции VIEW.
view(wh);
Пример завершается закрытием панели управления.