www.gusucode.com > sl3ddemos工具箱matlab源码程序 > sl3ddemos/vrmanipul_stereo3d.m
%% Manipulator with MATLAB(R) GUI in Active Stereoscopic Vision Mode % % The vrmanipul_stereo3d example shows a manipulator in active stereoscopic % vision mode. It illustrates the effect of stereo rendering properties and % the way how to work with the stereoscopic vision VRFIGURE properties. % % The manipulator will be displayed in active stereoscopic vision mode only if % quad-buffered OpenGL rendering is supported by your graphics card and is % enabled by the graphics card driver. Please note that stereoscopic vision % effect will be visible only if you use a 3D capable monitor (or a 3D TV set) % with active shutter glasses, autostereoscopic 3D monitor or similar % active stereoscopic vision technology. % % After starting the example, you will see a control panel with three sliders. % Use first two sliders for setting stereoscopic vision VRFIGURE properties, % namely for setting Stereo3DCameraOffset and Stereo3DHIT (HIT stands for % Horizontal Image Translation). Use the third slider for zooming the camera. % % Each virtual scene we create has a maximum amount of usable depth within % which it is possible to create effective 3D effects. By tuning the 2 % properties below we can adjust the best 3D perception for given scene, % with given camera zoom (viewpoint field of view) setting. % % The Stereo3DCameraOffset property defines the half of the interaxial distance % between the left and right cameras (viewpoints). By adjusting the distance % between cameras, we are able to dynamically increase or decrease the depth % of a scene. % % The Stereo3DHIT property defines the horizontal shifting of the left and right % eye images to change the value of the parallax of corresponding points. % By changing its value you can alter the on screen depth position of your scene. % % For more information on stereoscopic vision VRFIGURE properties please % refer to the product documentation. % Copyright 1998-2014 HUMUSOFT s.r.o. and The MathWorks, Inc. %% Create a World Object % We begin by creating an object of class VRWORLD that represents % the virtual world. wh = vrworld('vrmanipul.wrl'); %% Open the Virtual World % The world must be opened before it can be used. This is accomplished % with the OPEN command. open(wh); %% Accessing VRML Nodes % To access a VRML node, an appropriate VRNODE object must be created. % The node is identified by its name and the world it belongs to. H.View1 = vrnode(wh, 'View1'); H.View2 = vrnode(wh, 'View2'); %% Create Dialog % The dialog is used to interactively change field values of the VRML node % referred to by the VRNODE object just created. 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'); %% 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'); %% Attempt to Create Virtual Figure in Active Stereoscopic Vision Mode % If virtual figure is created in active stereoscopic vision mode % it should be possible to modify stereoscopic vision properties and to see % the stereoscopic vision 3D effect via shutter glasses. % 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); %% Check whether Virtual Figure Is in Active Stereoscopic Vision Mode % If the virtual figure could not be created in the active stereoscopic % vision mode, display a message and gray-out the stereoscopic vision % property controls. 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 %% % The example is finished by closing the control panel. displayEndOfDemoMessage(mfilename)