zSpace, Inc. · OTC:ZSPC

zSpace — Technical Presentation (September 2012)

26 slides from zSpace's technical presentation, September 2012

  1. Slide 1: How to Develop Virtual Reality Applications in zSpace – Part II

    How to Develop Virtual Reality Applications in zSpace – Part II CONFIDENTIAL | © 2012 Infinite Z, Inc. | All Rights Reserved

  2. Slide 2: Agenda

    Agenda • Review • System Requirements • Enabling Stereo • Head Tracking • Stylus Tracking • Direct Interaction • Questions

  3. Slide 3: Review

    Review Direct interaction with 3D virtual-holographic simulations in open space Full color, high resolution Passive, polarized stereoscopic display tracking eyewear Unique stylus Innovative software for 3D interaction development platform

  4. Slide 4: System Requirements

    System Requirements • Windows 7 or XP, 32bit or 64bit • Microsoft Visual Studio 2008 SP1, 2010 • Stereo Enabled GPU – Pro only (nVidia Quadro or AMD FirePro) • SDK is a collection of C++ classes – Simplified C interface in 2.7

  5. Slide 5: Application Steps

    Application Steps • Stereo Enabled Rendering • Use zSpace Stereo Data • Enable Head Tracking • Read Stylus • Direct Interaction

  6. Slide 6: Setting The Pixel Format

    Enabling Stereo Setting The Pixel Format // Obtain a device context for the window m_hDc = GetDC(m_hWnd); // Set an appropriate pixel format PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_STEREO | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 24, 0,

  7. Slide 7: Setting Up the zSpace Stereo Objects

    Enabling Stereo Setting Up the zSpace Stereo Objects // Create the stereo window. m_stereoWindow = new StereoWindow(windowX, windowY, windowWidth, windowHeight); // Do left/right frame detect StereoLeftRightDetect::initialize(m_stereoWindow, StereoLeftRightDetect::WINDOW_TYPE_GL); // Create a viewpo

  8. Slide 8: Setting Up the zSpace Stereo Objects

    Enabling Stereo Setting Up the zSpace Stereo Objects // Create the stereo window. m_stereoWindow = new StereoWindow(windowX, windowY, windowWidth, windowHeight); // Do left/right frame detect StereoLeftRightDetect::initialize(m_stereoWindow, StereoLeftRightDetect::WINDOW_TYPE_GL); // Create a viewpo

  9. Slide 9: Stereo 3D Rendering

    Enabling Stereo Stereo 3D Rendering Clear Back Buffers Position Left Left Back Right Back Camera Buffer Buffer Render Scene Position Right Left Front Right Front Camera Buffer Buffer Render Scene To Display Swap Buffer

  10. Slide 10: The Stereo Render Loop

    Enabling Stereo The Stereo Render Loop // The main render loop while (m_done == false) { renderEye(StereoFrustum::STEREO_EYE_LEFT); renderEye(StereoFrustum::STEREO_EYE_RIGHT); SwapBuffers(m_hDc); } // This happens for each eye void renderEye(StereoFrustum::StereoEye eye) { setupMatrices(eye); if (ey

  11. Slide 11: The Stereo Render Loop

    Enabling Stereo The Stereo Render Loop // The main render loop while (m_done == false) { renderEye(StereoFrustum::STEREO_EYE_LEFT); renderEye(StereoFrustum::STEREO_EYE_RIGHT); SwapBuffers(m_hDc); } // This happens for each eye void renderEye(StereoFrustum::StereoEye eye) { setupMatrices(eye); if (ey

  12. Slide 12: Application Steps

    Application Steps • Stereo Enabled Rendering • Use zSpace Stereo Data • Enable Head Tracking • Read Stylus • Direct Interaction

  13. Slide 13: Adjusting The Left and Right Cameras

    Enabling Stereo Adjusting The Left 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->g

  14. Slide 14: Adjusting The Left and Right Cameras

    Enabling Stereo Adjusting The Left 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->g

  15. Slide 15: Setting The Off-Axis Projections

    Enabling Stereo Setting The Off-Axis Projections GLfloat projectionMatrixGl[16]; // Set the projection matrix for eye. Matrix4 projectionMatrix4; stereoFrustum->getProjectionMatrix(eye, projectionMatrix4); MathConverterGl::convertMatrix4ToMatrixGl(projectionMatrix4,projectionMatrixGl); glMatrixMode(

  16. Slide 16: Setting The Off-Axis Projections

    Enabling Stereo Setting The Off-Axis Projections GLfloat projectionMatrixGl[16]; // Set the projection matrix for eye. Matrix4 projectionMatrix4; stereoFrustum->getProjectionMatrix(eye, projectionMatrix4); MathConverterGl::convertMatrix4ToMatrixGl(projectionMatrix4,projectionMatrixGl); glMatrixMode(

  17. Slide 17: Application Steps

    Application Steps • Stereo Enabled Rendering • Use zSpace Stereo Data • Enable Head Tracking • Read Stylus • Direct Interaction

  18. Slide 18: Head Tracking

    Head Tracking Initialize Tracking // Initialize 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_tra

  19. Slide 19: Application Steps

    Application Steps • Stereo Enabled Rendering • Use zSpace Stereo Data • Enable Head Tracking • Read Stylus • Direct Interaction

  20. Slide 20: Stylus Tracking

    Stylus Tracking 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 trackerSp

  21. Slide 21: Windowed Mode

    Windowed Mode Tracking Window Size and Position // Assuming that the viewport is tracking the window m_stereoWindow->move(x, y); m_stereoWindow->resize(width, height); Getting the Stylus Offset Vector3 viewportOffset = Vector3::ZERO(); const zspace::common::DisplayInfo::Display* display = m_stereoWi

  22. Slide 22: Windowed Mode

    Windowed Mode Tracking Window Size and Position // Assuming that the viewport is tracking the window m_stereoWindow->move(x, y); m_stereoWindow->resize(width, height); Getting the Stylus Offset Vector3 viewportOffset = Vector3::ZERO(); const zspace::common::DisplayInfo::Display* display = m_stereoWi

  23. Slide 23: Application Steps

    Application Steps • Stereo Enabled Rendering • Use zSpace Stereo Data • Enable Head Tracking • Read Stylus • Direct Interaction

  24. Slide 24: Direct Interaction

    Direct Interaction Interpreting a Pose Vector3 posePosition = Vector3::ZERO(); Vector3 poseX = Vector3::UNIT_X(); Vector3 poseY = Vector3::UNIT_Y(); Vector3 poseZ = Vector3::UNIT_Z(); Matrix4 primaryWorldPose; // Get the position of the pose posePosition = primaryWorldPose.getTrans(); // Get the X,

  25. Slide 25: Direct Interaction: Mouse Emulation

    Direct Interaction Mouse Emulation // Get the tracker mouse simulator TrackerMouseSimulator* trackerMouseSimulator = m_trackerSystem->getTrackerMouseSimulator(); // Set the tracker target to use TrackerTarget* primaryTarget = m_trackerSystem->getDefaultTrackerTarget(TrackerTarget::TYPE_PRIMARY); tra

  26. Slide 26: Questions

    Questions Transforming computer interaction lifelike | interactive | immersive zSpace: Direct interaction with 3D virtual-holographic simulations in open space - Full color, high resolution stereoscopic display - Unique stylus for 3D interaction - Passive, polarized tracking eyewear - Innovative sof

zSpace — Technical Presentation (September 2012) on 6ix