Esempio n. 1
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.AnalogCallback"))
                {
                    // This is just one of the paths: specifically, the Hydra's left
                    // controller's analog trigger. More are in the docs and/or listed on
                    // startup
#if NET20
                    using (var analogTrigger = AnalogInterface.GetInterface(context, "/controller/left/trigger"))
#else
                    using (var analogTrigger = context.GetAnalogInterface("/controller/left/trigger"))
#endif
                    {
                        analogTrigger.StateChanged += analogTrigger_StateChanged;
                        // Pretend that this is your application's main loop
                        for (int i = 0; i < 1000000; ++i)
                        {
                            context.update();
                        }

                        Console.WriteLine("Library shut down; exiting.");
                    }
                }
        }
Esempio n. 2
0
        public static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (ClientContext context = new ClientContext("com.osvr.exampleclients.managed.TrackerCallback"))
                {
                    // This is just one of the paths. You can also use:
                    // /me/hands/right
                    // /me/head
                    using (Interface lefthand = context.getInterface("/me/hands/left"))
                    {
                        TrackerCallbacks callbacks = new TrackerCallbacks();
                        // The coordinate system is right-handed, withX to the right, Y up, and Z near.
                        var poseInterface = new PoseInterface(lefthand);
                        poseInterface.StateChanged += TrackerCallbacks.myTrackerCallback;

                        // If you just want orientation
                        var orientationInterface = new OrientationInterface(lefthand);
                        orientationInterface.StateChanged += TrackerCallbacks.myOrientationCallback;

                        // or position
                        var positionInterface = new PositionInterface(lefthand);
                        positionInterface.StateChanged += TrackerCallbacks.myPositionCallback;

                        bool resetYawMode = false;
                        // Pretend that this is your application's main loop
                        for (int i = 0; i < 1000000; ++i)
                        {
                            // toggle between reset yaw mode and normal mode
                            // every 5000 iterations.
                            if (i % 5000 == 0)
                            {
                                resetYawMode = !resetYawMode;
                                if (resetYawMode)
                                {
                                    context.SetRoomRotationUsingHead();
                                }
                                else
                                {
                                    context.ClearRoomToWorldTransform();
                                }
                            }
                            context.update();
                        }

                        Console.WriteLine("Library shut down; exiting.");
                    }
                }
        }
Esempio n. 3
0
        public static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (ClientContext context = new ClientContext("com.osvr.exampleclients.managed.TrackerCallback"))
                {
#if NET20
                    using (var button1 = ButtonInterface.GetInterface(context, "/controller/left/1"))
                        using (var button2 = ButtonInterface.GetInterface(context, "/controller/left/2"))
#else
                    using (var button1 = context.GetButtonInterface("/controller/left/1"))
                        using (var button2 = context.GetButtonInterface("/controller/left/2"))
#endif
                        {
                            // Pretend that this is your application's main loop
                            for (int i = 0; i < 1000000; ++i)
                            {
                                context.update();

                                // getting the current state calls into the native DLL, so
                                // try to get the state only once per frame.
                                var button1State = button1.GetState();
                                var button2State = button2.GetState();
                                if (button1State.Value == ButtonInterface.Pressed)
                                {
                                    Console.WriteLine("Pressing button 1!");
                                }

                                // re-using button1State
                                if (button1State.Value == ButtonInterface.Pressed &&
                                    button2State.Value == ButtonInterface.Pressed)
                                {
                                    Console.WriteLine("Pressing both button 1 and 2!");
                                }
                            }

                            Console.WriteLine("Library shut down; exiting.");
                        }
                }
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.EyeTracker"))
                {
                    // there are three types of interfaces for eye tracking, 2D, 3D, and blinking
#if NET20
                    using (var eyeTracker2D = EyeTracker2DInterface.GetInterface(context, EyeTrackerPath))
                        using (var eyeTracker3D = EyeTracker3DInterface.GetInterface(context, EyeTrackerPath))
                            using (var eyeTrackerBlink = EyeTrackerBlinkInterface.GetInterface(context, EyeTrackerPath))
#else
                    using (var eyeTracker2D = context.GetEyeTracker2DInterface(EyeTrackerPath))
                        using (var eyeTracker3D = context.GetEyeTracker3DInterface(EyeTrackerPath))
                            using (var eyeTrackerBlink = context.GetEyeTrackerBlinkInterface(EyeTrackerPath))
#endif
                            {
                                eyeTracker2D.StateChanged    += eyeTracker2D_StateChanged;
                                eyeTracker3D.StateChanged    += eyeTracker3D_StateChanged;
                                eyeTrackerBlink.StateChanged += eyeTrackerBlink_StateChanged;

                                // Pretend that this is your application's main loop
                                for (int i = 0; i < 1000000; ++i)
                                {
                                    context.update();
                                    var eyeTracker2DState    = eyeTracker2D.GetState();
                                    var eyeTracker3DState    = eyeTracker3D.GetState();
                                    var eyeTrackerBlinkState = eyeTrackerBlink.GetState();
                                    Console.WriteLine("Getting state:");
                                    Console.WriteLine("EyeTracker2D: {0}", FormatEyeTracker2DReport(eyeTracker2DState.Value));
                                    Console.WriteLine("EyeTracker3D: {0}", FormatEyeTracker3DReport(eyeTracker3DState.Value));
                                    Console.WriteLine("EyeTrackerBlink: {0}", eyeTrackerBlinkState.Value);
                                }

                                Console.WriteLine("Library shut down; exiting.");
                            }
                }
        }
Esempio n. 5
0
        public static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (ClientContext context = new ClientContext("com.osvr.exampleclients.managed.TrackerCallback"))
                {
                    // We're creating an adapter from the OSVR native PositionInterface to a custom interface where the
                    // report and state types are both Vector3f.
                    using (var lefthand = Vector3fPositionInterface.GetVector3fPositionInterface(context, "/me/hands/left"))
                    {
                        lefthand.Start();
                        lefthand.StateChanged += myPositionCallback;

                        // Pretend that this is your application's main loop
                        for (int i = 0; i < 1000000; ++i)
                        {
                            context.update();
                        }

                        Console.WriteLine("Library shut down; exiting.");
                    }
                }
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.DisplayParameter"))
                {
                    string displayDescription = context.getStringParameter("/display");

                    Console.WriteLine("Got value of /display:");
                    Console.WriteLine(displayDescription);

                    for (var i = 0; i < 100000; i++)
                    {
                        context.update();

                        using (var displayConfig = context.GetDisplayConfig())
                        {
                            // GetDisplayConfig can sometimes fail, returning null
                            if (displayConfig != null)
                            {
                                Console.WriteLine("Waiting for the display config to be initialized and receive its first pose...");
                                do
                                {
                                    context.update();
                                } while (!displayConfig.CheckDisplayStartup());

                                var numDisplayInputs = displayConfig.GetNumDisplayInputs();
                                Console.WriteLine("There are {0} display inputs.", numDisplayInputs);

                                for (byte displayInputIndex = 0; displayInputIndex < numDisplayInputs; displayInputIndex++)
                                {
                                    var displayDimensions = displayConfig.GetDisplayDimensions(displayInputIndex);
                                    Console.WriteLine("Display input {0} is width {1} and height {2}",
                                                      displayInputIndex, displayDimensions.Width, displayDimensions.Height);
                                }

                                var numViewers = displayConfig.GetNumViewers();
                                Console.WriteLine("There are {0} viewers for this display configuration.", numViewers);
                                for (uint viewer = 0; viewer < numViewers; viewer++)
                                {
                                    var numEyes = displayConfig.GetNumEyesForViewer(viewer);
                                    Console.WriteLine("There are {0} eyes for viewer {1}.", numEyes, viewer);

                                    var viewerPose = displayConfig.GetViewerPose(viewer);
                                    Console.WriteLine("Viewer pose for viewer {0}: {1}",
                                                      viewer, GetPoseDisplay(viewerPose));

                                    for (byte eye = 0; eye < numEyes; eye++)
                                    {
                                        var numSurfaces = displayConfig.GetNumSurfacesForViewerEye(viewer, eye);
                                        Console.WriteLine("There are {0} surfaces for eye {1} on viewer {2}.",
                                                          numSurfaces, eye, viewer);

                                        var viewerEyePose = displayConfig.GetViewerEyePose(viewer, eye);
                                        Console.WriteLine("Viewer eye pose for eye {0} on viewer {1}: {2}.",
                                                          eye, viewer, GetPoseDisplay(viewerEyePose));

                                        var viewerEyeMatrixd = displayConfig.GetViewerEyeViewMatrixd(viewer, eye, MatrixConventionsFlags.Default);
                                        Console.WriteLine("Viewer eye view-matrix (double) for eye {0} on viewer {1}: {2}",
                                                          eye, viewer, viewerEyeMatrixd.ToString());

                                        var viewerEyeMatrixf = displayConfig.GetViewerEyeViewMatrixf(viewer, eye, MatrixConventionsFlags.Default);
                                        Console.WriteLine("Viewer eye view-matrix (float) for eye {0} on viewer {1}: {2}",
                                                          eye, viewer, viewerEyeMatrixf.ToString());

                                        for (uint surface = 0; surface < numSurfaces; surface++)
                                        {
                                            Console.WriteLine("surface {0} for eye {1} for viewer {2}:",
                                                              surface, eye, viewer);

                                            var viewport = displayConfig.GetRelativeViewportForViewerEyeSurface(
                                                viewer, eye, surface);
                                            Console.WriteLine("Relative viewport: {0}", viewport.ToString());

                                            var wantsDistortion = displayConfig.DoesViewerEyeSurfaceWantDistortion(
                                                viewer, eye, surface);
                                            Console.WriteLine("Surface wants distortion? {0}", wantsDistortion);

                                            if (wantsDistortion)
                                            {
                                                var radialDistortionPriority = displayConfig.GetViewerEyeSurfaceRadialDistortionPriority(
                                                    viewer, eye, surface);
                                                Console.WriteLine("Radial Distortion priority: {0}", radialDistortionPriority);

                                                if (radialDistortionPriority >= 0)
                                                {
                                                    var distortionParameters = displayConfig.GetViewerEyeSurfaceRadialDistortion(
                                                        viewer, eye, surface);
                                                    Console.WriteLine("Surface radial distortion parameters: {0}", distortionParameters.ToString());
                                                }
                                            }

                                            var projectiond = displayConfig.GetProjectionMatrixForViewerEyeSurfaced(
                                                viewer, eye, surface, 1.0, 1000.0, MatrixConventionsFlags.Default);
                                            Console.WriteLine("Projection (double): {0}", projectiond.ToString());

                                            var projectionf = displayConfig.GetProjectionMatrixForViewerEyeSurfacef(
                                                viewer, eye, surface, 1.0f, 1000.0f, MatrixConventionsFlags.Default);
                                            Console.WriteLine("Projection (float): {0}", projectionf.ToString());

                                            var projectionClippingPlanes = displayConfig.GetViewerEyeSurfaceProjectionClippingPlanes(viewer, eye, surface);
                                            Console.WriteLine("Projection clipping planes: left: {0} right: {1} top: {2} bottom: {3}",
                                                              projectionClippingPlanes.Left,
                                                              projectionClippingPlanes.Right,
                                                              projectionClippingPlanes.Top,
                                                              projectionClippingPlanes.Bottom);

                                            var displayInputIndex = displayConfig.GetViewerEyeSurfaceDisplayInputIndex(viewer, eye, surface);
                                            Console.WriteLine("Display input index: {0}", displayInputIndex);
                                        }
                                    }
                                }
                                break;
                            }
                        }
                    }

                    Console.WriteLine("Library shut down; exiting.");
                }
        }