zspace an integrated immersive stereoscopic 3d system
play

zSpace: An Integrated Immersive Stereoscopic 3D System - PowerPoint PPT Presentation

zSpace: An Integrated Immersive Stereoscopic 3D System Doug Twilleager zSpace So1ware CTO Agenda zView zSpace Overview System Requirements


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

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

  3. zSpace ¡Overview ¡ Direct ¡interacGon ¡with ¡3D ¡virtual-­‑holographic ¡ simulaGons ¡in ¡open ¡space ¡ Full ¡color, ¡high ¡resoluGon ¡ Passive, ¡polarized ¡ ¡ stereoscopic ¡display ¡ tracking ¡eyewear ¡ Unique ¡stylus ¡ InnovaGve ¡so1ware ¡ ¡ for ¡3D ¡interacGon ¡ development ¡plaKorm ¡

  4. 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 ¡

  5. SDK ¡Architecture ¡ ApplicaGon ¡Rendering ¡ ApplicaGon ¡Logic ¡ zSpace ¡SDK ¡ zSpace ¡ zSpace ¡ Stereo ¡ Tracking ¡ USB ¡ Video ¡ zSpace ¡Display ¡ GPU ¡

  6. Using ¡zSpace ¡Stereo ¡ Mono ¡View ¡ Far ¡Clip ¡ Screen ¡ Near ¡Clip ¡

  7. Using ¡zSpace ¡Stereo ¡ Stereo ¡View ¡ Far ¡Clip ¡ PosiGve ¡ Parallax ¡ Screen ¡ NegaGve ¡ Parallax ¡ Near ¡Clip ¡

  8. Using ¡zSpace ¡Stereo ¡ AdjusGng ¡The ¡Le1 ¡and ¡Right ¡Cameras ¡ 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); ¡ ¡

  9. Using ¡zSpace ¡Stereo ¡ Serng ¡The ¡Off-­‑Axis ¡ProjecGons ¡ 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); ¡

  10. Enabling ¡Head ¡Tracking ¡ Stereo ¡View ¡ Far ¡Clip ¡ PosiGve ¡ Parallax ¡ Screen ¡ NegaGve ¡ Parallax ¡ Near ¡Clip ¡

  11. Enabling ¡Head ¡Tracking ¡ IniGalize ¡Tracking ¡ // ¡IniGalize ¡the ¡tracking ¡system ¡– ¡this ¡is ¡done ¡once ¡ m_trackerSystem ¡= ¡new ¡zspace::tracker::TrackerSystem(); ¡ ¡ Passing ¡Along ¡The ¡Head ¡Pose ¡ // ¡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); ¡

  12. Coordinate ¡System ¡Overview ¡ Y ¡ Camera ¡Space ¡ X ¡ Z ¡ Display ¡ Offset ¡ Display ¡ Angle ¡

  13. Coordinate ¡System ¡Overview ¡ Y ¡ Tracker ¡Space ¡ X ¡ Z ¡ Display ¡ Offset ¡ Display ¡ Angle ¡

  14. 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; ¡

  15. Future ¡DirecGons ¡ • Stereo ¡ReprojecGon ¡ – NVIDIA ¡Nsight ¡ • OpGmizing ¡Rendering ¡ – Frustum ¡Culling ¡ – Shadow ¡Map ¡GeneraGon ¡ • MulGple ¡ProjecGon ¡Regions ¡ • Depth ¡of ¡Field ¡ • Grid ¡Rendering ¡(NVIDIA ¡GRID) ¡

  16. 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 ¡ ¡ ¡

Recommend


More recommend