Манипулятор с графический интерфейсом пользователя MATLAB® в активном стереоскопическом режиме видения

vrmanipul_stereo3d пример показывает манипулятор в активном стереоскопическом режиме видения. Это иллюстрирует эффект свойств рендеринга стерео и пути, как работать со стереоскопическими свойствами VRFIGURE видения.

Манипулятор будет отображен в активном стереоскопическом режиме видения, только если рендеринг OpenGL с квадратическим буфером поддерживается вашей видеокартой и включен драйвером графической платы. Обратите внимание на то, что стереоскопический эффект видения будет видим, только если вы используете 3D способный монитор (или 3D телевизор) с очками с активным затвором, автостереоскопическим 3D монитором или подобной активной стереоскопической технологией видения.

После запуска примера вы будете видеть панель управления с тремя ползунками. Используйте сначала два ползунка для установки стереоскопических свойств VRFIGURE видения, а именно, для установки Stereo3DCameraOffset и Stereo3DHIT (HIT обозначает Горизонтальный Перевод Изображений). Используйте третий ползунок для изменения масштаба камеры.

Каждая виртуальная сцена, которую мы создаем, имеет максимальное количество применимой глубины, в которой возможно создать эффективные 3D эффекты. Путем настройки этих 2 свойств ниже мы можем настроить лучшее 3D восприятие для данной сцены с данным изменением масштаба камеры (поле зрения точки зрения) установка.

Свойство Stereo3DCameraOffset задает половину межосевого расстояния между левыми и правыми камерами (точки зрения). Путем корректировки расстояния между камерами мы можем динамически увеличить или уменьшить глубину сцены.

Свойство Stereo3DHIT задает горизонтальную перемену левых и правых изображений глаза, чтобы изменить значение параллакса соответствующих точек. Путем изменения его значения можно измениться на экранном положении глубины сцены.

Для получения дополнительной информации о стереоскопических свойствах VRFIGURE видения обратитесь к документации по продукту.

Создайте мировой объект

Мы начинаем путем создания объекта класса VRWORLD, который представляет виртуальный мир.

wh = vrworld('vrmanipul.wrl');

Откройте виртуальный мир

Мир должен быть открыт, прежде чем он сможет использоваться. Это выполняется с ОТКРЫТЬ командой.

open(wh);

Доступ к узлам VRML

Чтобы получить доступ к узлу VRML, соответствующий объект VRNODE должен быть создан. Узел идентифицирован его именем и миром, которому он принадлежит.

H.View1 = vrnode(wh, 'View1');
H.View2 = vrnode(wh, 'View2');

Создайте диалоговое окно

Диалоговое окно используется, чтобы в интерактивном режиме изменить значения полей узла VRML, упомянутого объектом VRNODE, только созданным.

figh = dialog('Position',[360 350 530 185], 'Name', 'Simulink 3D Animation Example', ...
              'WindowStyle', 'normal', ...
              'CloseRequestFcn', ...
              'w = vrworld(''vrmanipul.wrl''); close(w); try; delete(w); end; closereq');

Создайте стереоскопическую панель свойств видения

stereopanel = uipanel(figh, ...
                      'Title', 'Stereoscopic Vision Properties', ...
                      'Units', 'pixels', ...
                      'Position', [0 72 530 103]);

% Create Stereoscopic Vision Camera Offset Control
H.cameraoffset = uicontrol('Parent',stereopanel, 'Style','slider', ...
                   'Position',[164 62 352 20], 'Value', 0, ...
                   'Min', 0, 'Max', 100, ...
                   'Callback', 'set(H.vrfig, ''Stereo3DCameraOffset'', get(H.cameraoffset,''Value'')/10);');

uicontrol('Parent',stereopanel, 'Position',[0 65 154 14], 'String','Camera Offset', ...
          'Style','text', 'HorizontalAlignment','right');

% Create Stereoscopic Vision Horizontal Image Translation Control
H.hit = uicontrol('Parent',stereopanel, 'Style','slider', ...
                   'Position',[164 21 352 20], 'Value', 0, ...
                   'Min', 0, 'Max', 0.35, ...
                   'Callback', 'set(H.vrfig, ''Stereo3DHIT'', get(H.hit,''Value''));');

uicontrol('Parent',stereopanel, 'Position',[0 24, 154 14], 'String','Horizontal Image Translation', ...
          'Style','text', 'HorizontalAlignment','right');

Создайте панель свойств навигации

navigationpanel = uipanel(figh, ...
                      'Title', 'Navigation', ...
                      'Units', 'pixels', ...
                      'Position', [0 0 530 62]);

% Create Camera Field of View Control
H.zoom = uicontrol('Parent',navigationpanel, 'Style','slider', ...
                  'Position',[164 21 352 20], 'Value', 1, ...
                  'Callback', ['viewpointdesc = get(H.vrfig, ''Viewpoint'');', ...
                               'H.(viewpointdesc).fieldOfView = 0.4 + 0.4 * (1-get(H.zoom,''Value''));']);

uicontrol('Parent',navigationpanel, 'Position',[0 24 154 14], 'String','Camera Zoom', ...
          'Style','text', 'HorizontalAlignment','right');

Попытайтесь создать виртуальную фигуру в активном стереоскопическом режиме видения

Если виртуальная фигура создается в активном стереоскопическом режиме видения, должно быть возможно изменить стереоскопические свойства видения и видеть стереоскопическое видение 3D эффект через стекла затвора.

% Suppress possible warning about active stereoscopic vision mode failure and create vrfigure
[lwm, lwi] = lastwarn;
ws = warning('off', 'sl3d:interface:enginewarn');
H.vrfig = vrfigure(wh, 'Stereo3D', 'active');

% Set the handles
setappdata(figh, 'Handles', H);

% Set defaults
defco = 22; defhit = 0.014;
set(H.vrfig, 'Stereo3DCameraOffset', defco/10, 'Stereo3DHIT', defhit);
set(H.cameraoffset, 'Value', defco);
set(H.hit, 'Value', defhit);
H.View1.fieldOfView = 0.4;

% Draw the vrfigure
vrdrawnow;

% Re-enable possible warning about active stereoscopic vision mode failure
warning(ws);
lastwarn(lwm, lwi);

Проверяйте, является ли виртуальная фигура в активном стереоскопическом режиме видения

Если виртуальная фигура не могла бы быть создана в активном стереоскопическом режиме видения, отобразить сообщение и серо-стереоскопические средства управления свойством видения.

if strcmp(get(H.vrfig, 'Stereo3D'), 'off')
  set(stereopanel, 'Title', [get(stereopanel, 'Title') ' (not available for current display)']);
  set(get(stereopanel, 'Children'), 'Enable', 'off');
end

Пример закончен путем закрытия панели управления.