Functions for using SpaceNavigator-compatible 3D Mice with OpenGL ================================================================= This Haskell package contains functions for managing input from a SpaceNavigator <>, or a 3D mouse compatible with its protocols. OpenGL callbacks are provided, along with utilities for quantizing the input from the mouse or tracking its six degrees of freedom. Please report issues at <>. Skeletal example illustrating the use of a SpaceNavigator with OpenGL --------------------------------------------------------------------- ```haskell main :: IO () main = do _ <- getArgsAndInitialize initialDisplayMode $= [WithDepthBuffer, DoubleBuffered] _ <- createWindow "SpaceNavigator OpenGL Example" depthFunc $= Just Less -- Create the tracker. tracking <- newIORef $ def {spaceNavigatorPosition = Vector3 0 0 0} -- Register a callback which quantizes and tracks the 3D mouse input. spaceNavigatorCallback $=! Just ( quantizeSpaceNavigator defaultQuantization $ trackSpaceNavigator defaultTracking tracking) -- The display callback needs the tracker. displayCallback $= display tracking idleCallback $= Just (postRedisplay Nothing) mainLoop display :: IORef SpaceNavigatorTrack -> DisplayCallback display tracking = do clear [ColorBuffer, DepthBuffer] loadIdentity -- Get the tracking state. tracking' <- get tracking -- Update the matrix based on the tracking doTracking tracking' -- All of the rendering actions go here. renderPrimitive . . . swapBuffers ``` Notes on hardware and software ------------------------------ This code has been validated with the following configuration of hardware and software: * SpaceNavigator <> * spacenavd <>, 0.5 * Ubuntu 15.04, 64-bit * GHC 7.6.3 * OpenGL == 2.8.0.0 * GLUT == 2.4.0.0