zSpace:(An(Integrated(Immersive( Stereoscopic3DSystem(( ·...

Preview:

Citation preview

zSpace:  An  Integrated  Immersive  Stereoscopic  3D  System    Doug  Twilleager  zSpace  So1ware  CTO  

Agenda    •  zView  •  zSpace  Overview  •  System  Requirements  •  SDK  Architecture  •  Using  zSpace  Stereo  •  Enabling  Head  Tracking  •  Coordinate  System  Overview  •  Enabling  the  Stylus  •  Future  DirecGons  

Direct  interacGon  with  3D  virtual-­‐holographic  simulaGons  in  open  space  

InnovaGve  so1ware    development  plaKorm  

Full  color,  high  resoluGon  stereoscopic  display  

Passive,  polarized    tracking  eyewear  

Unique  stylus  for  3D  interacGon  

zSpace  Overview  

System  Requirements  

•  Windows  7,  8,  or  XP,  32bit  or  64bit  •  Microso1  Visual  Studio  2008  SP1,  2010  •  Stereo  Enabled  GPU  – NVIDIA  Quadro  K4000  

•  SDK  is  a  collecGon  of  C++  classes  – Simplified  C  interface  in  2.7  

•  OpenGL  or  DirectX  – NVAPI  Stereo  

ApplicaGon  Rendering  

zSpace  Stereo  

zSpace  Display  GPU  

zSpace  Tracking  

ApplicaGon  Logic  

zSpace  SDK  

USB  Video  

SDK  Architecture  

Using  zSpace  Stereo  Far  Clip  

Near  Clip  

Screen  

Mono  View  

Using  zSpace  Stereo  Far  Clip  

Near  Clip  

Screen  

Stereo  View  

NegaGve  Parallax  

PosiGve  Parallax  

Using  zSpace  Stereo  

GLfloat  monoModelViewGl[16];  GLfloat  viewMatrixGl[16];    //  Copy  the  mono  model-­‐view  matrix.  glMatrixMode(GL_MODELVIEW);  glGetFloatv(GL_MODELVIEW_MATRIX,  monoModelViewGl);    //  Get  the  stereo  frustum.  StereoFrustum*  stereoFrustum  =  m_stereoViewport-­‐>getStereoFrustum();    //  Modify  the  model-­‐view  matrix  for  eye.    //  Note:  The  view  matrix  contains  eye  offset  plus  any  rotaGon  required  for  off-­‐axis  projecGon.  Matrix4  viewMatrix4;  stereoFrustum-­‐>getViewMatrix(eye,  viewMatrix4);  MathConverterGl::convertMatrix4ToMatrixGl(viewMatrix4,  viewMatrixGl);    glLoadMatrixf(viewMatrixGl);  glMultMatrixf(monoModelViewGl);    

AdjusGng  The  Le1  and  Right  Cameras  

Using  zSpace  Stereo  

GLfloat  projecGonMatrixGl[16];    //  Set  the  projecGon  matrix  for  eye.  Matrix4  projecGonMatrix4;  stereoFrustum-­‐>getProjecGonMatrix(eye,  projecGonMatrix4);  MathConverterGl::convertMatrix4ToMatrixGl(projecGonMatrix4,projecGonMatrixGl);    glMatrixMode(GL_PROJECTION);  glLoadMatrixf(projecGonMatrixGl);  

                     Alternate  Approach  

 StereoFrustum::Bounds  bounds;    //  Get  the  frustum  bounds  bounds  =  stereoFrustum-­‐>getBounds(eye);    glMatrixMode(GL_PROJECTION);  glFrustum(bounds.le1,  bounds.right,  bounds.boqom,  bounds.top,  bounds.nearClip,  bounds.farClip);  

Serng  The  Off-­‐Axis  ProjecGons  

Enabling  Head  Tracking  Far  Clip  

Near  Clip  

Screen  

Stereo  View  

NegaGve  Parallax  

PosiGve  Parallax  

Enabling  Head  Tracking  IniGalize  Tracking  

//  IniGalize  the  tracking  system  –  this  is  done  once  m_trackerSystem  =  new  zspace::tracker::TrackerSystem();    

//  Cache  the  current  tracker  targets  m_trackerSystem-­‐>captureTargets();    //  Get  the  head  target  TrackerTarget*  headTarget  =  m_trackerSystem-­‐>getDefaultTrackerTarget(TrackerTarget::TYPE_HEAD);    //  Get  the  head  pose  Matrix4  headPose  =  Matrix4::IDENTITY();  headTarget-­‐>getPose(headPose);    //  Set  the  stereo  head  pose  StereoFrustum*  stereoFrustum  =  m_stereoViewport-­‐>getStereoFrustum();  stereoFrustum-­‐>setHeadPose(headPose);  

Passing  Along  The  Head  Pose  

X  

Y  

Z  

Camera  Space  

Display  Offset  

Display  Angle  

Coordinate  System  Overview  

X  

Y  

Z  

Tracker  Space  

Display  Offset  

Display  Angle  

Coordinate  System  Overview  

Enabling  the  Stylus  Read  Stylus  and  Convert  to  World  Space  

//  Get  the  stylus  target  TrackerTarget*  primaryTarget  =  m_trackerSystem-­‐>getDefaultTrackerTarget(TrackerTarget::TYPE_PRIMARY);    //  Get  the  head  pose  Matrix4  primaryPose=  Matrix4::IDENTITY();  primaryTarget  -­‐>getPose(primaryPose);    Matrix4  trackerSpaceToCameraSpace;  Matrix4  worldPrimaryPose;    //  Get  the  display  for  this  window  const  zspace::common::DisplayInfo::Display*  display  =  m_stereoWindow-­‐>getCurrentDisplay();    //  Get  the  tracker  to  camera  space  transform  trackerSpaceToCameraSpace  =  DisplayInfo::getTrackerToCameraSpaceTransform(display);    //  Transform  the  pose  from  tracker  space  to  world  space  worldPrimaryPose  =  cameraToWorldSpace  *  trackerSpaceToCameraSpace  *  primaryPose;  

Future  DirecGons  

•  Stereo  ReprojecGon  – NVIDIA  Nsight  

•  OpGmizing  Rendering  – Frustum  Culling  – Shadow  Map  GeneraGon  

•  MulGple  ProjecGon  Regions  •  Depth  of  Field  •  Grid  Rendering  (NVIDIA  GRID)  

zSpace  –  Booth  116  

Transforming  computer  interacGon  lifelike    |    interacGve    |    immersive  

 zSpace:  Direct  interacGon  with  3D  virtual-­‐holographic  simulaGons  in  open  space    

-­‐  Full  color,  high  resoluGon  stereoscopic  display  

-­‐  Unique  stylus    for  3D  interacGon    -­‐  Passive,  polarized  tracking  eyewear    -­‐  InnovaGve  so1ware  development  plaKorm  

   

Recommended