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

zspace an integrated immersive stereoscopic 3d system
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

zSpace: ¡An ¡Integrated ¡Immersive ¡ Stereoscopic ¡3D ¡System ¡ ¡

Doug ¡Twilleager ¡ zSpace ¡So1ware ¡CTO ¡

slide-2
SLIDE 2

Agenda ¡ ¡

  • zView ¡
  • zSpace ¡Overview ¡
  • System ¡Requirements ¡
  • SDK ¡Architecture ¡
  • Using ¡zSpace ¡Stereo ¡
  • Enabling ¡Head ¡Tracking ¡
  • Coordinate ¡System ¡Overview ¡
  • Enabling ¡the ¡Stylus ¡
  • Future ¡DirecGons ¡
slide-3
SLIDE 3

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 ¡

slide-4
SLIDE 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 ¡

slide-5
SLIDE 5

ApplicaGon ¡Rendering ¡ zSpace ¡ Stereo ¡ zSpace ¡Display ¡ GPU ¡ zSpace ¡ Tracking ¡ ApplicaGon ¡Logic ¡

zSpace ¡SDK ¡

USB ¡ Video ¡

SDK ¡Architecture ¡

slide-6
SLIDE 6

Using ¡zSpace ¡Stereo ¡

Far ¡Clip ¡ Near ¡Clip ¡ Screen ¡ Mono ¡View ¡

slide-7
SLIDE 7

Using ¡zSpace ¡Stereo ¡

Far ¡Clip ¡ Near ¡Clip ¡ Screen ¡ Stereo ¡View ¡ NegaGve ¡ Parallax ¡ PosiGve ¡ Parallax ¡

slide-8
SLIDE 8

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 ¡

slide-9
SLIDE 9

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 ¡

slide-10
SLIDE 10

Enabling ¡Head ¡Tracking ¡

Far ¡Clip ¡ Near ¡Clip ¡ Screen ¡ Stereo ¡View ¡ NegaGve ¡ Parallax ¡ PosiGve ¡ Parallax ¡

slide-11
SLIDE 11

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 ¡

slide-12
SLIDE 12

X ¡ Y ¡ Z ¡

Camera ¡Space ¡

Display ¡ Offset ¡ Display ¡ Angle ¡

Coordinate ¡System ¡Overview ¡

slide-13
SLIDE 13

X ¡ Y ¡ Z ¡

Tracker ¡Space ¡

Display ¡ Offset ¡ Display ¡ Angle ¡

Coordinate ¡System ¡Overview ¡

slide-14
SLIDE 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; ¡

slide-15
SLIDE 15

Future ¡DirecGons ¡

  • Stereo ¡ReprojecGon ¡

– NVIDIA ¡Nsight ¡

  • OpGmizing ¡Rendering ¡

– Frustum ¡Culling ¡ – Shadow ¡Map ¡GeneraGon ¡

  • MulGple ¡ProjecGon ¡Regions ¡
  • Depth ¡of ¡Field ¡
  • Grid ¡Rendering ¡(NVIDIA ¡GRID) ¡
slide-16
SLIDE 16

zSpace ¡– ¡Booth ¡116 ¡

Transforming ¡computer ¡interacGon ¡

lifelike ¡ ¡| ¡ ¡interacGve ¡ ¡| ¡ ¡immersive ¡ ¡ zSpace: ¡Direct ¡interacGon ¡with ¡3D ¡virtual-­‑holographic ¡simulaGons ¡in ¡

  • pen ¡space ¡

¡

  • ­‑ ¡Full ¡color, ¡high ¡resoluGon ¡stereoscopic ¡display ¡
  • ­‑ ¡Unique ¡stylus ¡ ¡for ¡3D ¡interacGon ¡

¡

  • ­‑ ¡Passive, ¡polarized ¡tracking ¡eyewear ¡

¡

  • ­‑ ¡InnovaGve ¡so1ware ¡development ¡plaKorm ¡

¡ ¡