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."); } } }
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."); } } }
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."); } } }
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."); } } }
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."); } } }
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."); } }