zSpace:(An(Integrated(Immersive( Stereoscopic3DSystem(( ·...
Transcript of zSpace:(An(Integrated(Immersive( Stereoscopic3DSystem(( ·...
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