В vrmanipul_stereo3d примере показан манипулятор в режиме активного стереоскопического зрения. Он иллюстрирует эффект свойств стереопередачи и способ работы со свойствами стереоскопического зрения VRFIGURE.
Манипулятор будет отображаться в режиме активного стереоскопического зрения только в том случае, если четырехбуферный рендеринг OpenGL поддерживается графической картой и включен драйвером графической карты. Обратите внимание, что эффект стереоскопического зрения будет видимым только в том случае, если вы используете монитор с 3D возможностями (или 3D телевизор) с активными очками затвора, автостереоскопический монитор 3D или подобную технологию активного стереоскопического зрения.
После запуска примера появится панель управления с тремя ползунками. Используйте первые два ползунка для установки свойств стереоскопического зрения VRFIGURE, а именно для установки Stereo3DCameraOffset и Stereo3DHIT (HIT означает горизонтальное преобразование изображения). Используйте третий ползунок для масштабирования камеры.
Каждая виртуальная сцена, которую мы создаем, имеет максимальную полезную глубину, в пределах которой можно создавать эффективные 3D эффекты. Настроив 2 свойства ниже, мы можем настроить наилучшее восприятие 3D для данной сцены, с заданным масштабом камеры (поле зрения точки обзора).
Свойство Stereo3DCameraOffset определяет половину расстояния между левой и правой камерами (точки обзора). Регулируя расстояние между камерами, мы можем динамически увеличивать или уменьшать глубину сцены.
Свойство Stereo3DHIT определяет горизонтальное смещение изображения левого и правого глаз для изменения значения параллакса соответствующих точек. Изменяя его значение, можно изменить положение сцены на глубине экрана.
Для получения дополнительной информации о свойствах стереоскопического зрения VRFIGURE см. документацию по продукту.
Мы начинаем с создания объекта класса VRWORLD, который представляет виртуальный мир.
wh = vrworld('vrmanipul.x3d');
Мир должен быть открыт, прежде чем его можно будет использовать. Это выполняется с помощью команды ОТКРЫТЬ.
open(wh);
Для доступа к узлу VRML необходимо создать соответствующий объект VRNODE. Узел идентифицируется по его названию и миру, которому он принадлежит.
H.View1 = vrnode(wh, 'View1');
H.View1.fieldOfView = 0.4;
Диалоговое окно используется для интерактивного изменения значений полей узла VRML, на который ссылается только что созданный объект VRNODE.
figh = dialog('Position',[360 350 530 185], 'Name', 'Simulink 3D Animation Example', ... 'WindowStyle', 'normal', ... 'CloseRequestFcn', ... 'w = vrworld(''vrmanipul.x3d''); close(w); try; delete(w); end; closereq'); % Create Stereoscopic Vision Properties Panel 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'); % Create Navigation Properties Panel 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); % 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'); set(H.vrfig, 'Name', 'VR Manipulator (stereoscopic display not detected)'); end


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