module Vis.Camera ( Camera0(..)
, Camera(..)
, makeCamera
) where
import Data.IORef ( IORef, newIORef )
import Graphics.UI.GLUT ( GLdouble, GLint )
data Camera0 = Camera0 { phi0 :: GLdouble
, theta0 :: GLdouble
, rho0 :: GLdouble
}
data Camera = Camera { phi :: IORef GLdouble
, theta :: IORef GLdouble
, rho :: IORef GLdouble
, x0c :: IORef GLdouble
, y0c :: IORef GLdouble
, z0c :: IORef GLdouble
, ballX :: IORef GLint
, ballY :: IORef GLint
, leftButton :: IORef GLint
, rightButton :: IORef GLint
}
makeCamera :: Camera0 -> IO Camera
makeCamera camera0 = do
phi' <- newIORef $ phi0 camera0
theta' <- newIORef $ theta0 camera0
rho' <- newIORef $ rho0 camera0
x0 <- newIORef 0
y0 <- newIORef 0
z0 <- newIORef 0
ballX' <- newIORef (1)
ballY' <- newIORef (1)
leftButton' <- newIORef 0
rightButton' <- newIORef 0
return Camera { phi = phi'
, theta = theta'
, rho = rho'
, x0c = x0
, y0c = y0
, z0c = z0
, ballX = ballX'
, ballY = ballY'
, leftButton = leftButton'
, rightButton = rightButton'
}