module Graphics.GPipe.Internal.Linear where import Control.Lens ((^.)) import Linear (M44, Metric (dot, signorm), R1 (..), R2 (..), R3 (..), V3, V4 (..), cross) lookAt :: Floating a => V3 a -> V3 a -> V3 a -> V4 (V4 a) lookAt :: V3 a -> V3 a -> V3 a -> V4 (V4 a) lookAt V3 a eye V3 a center V3 a up = V4 a -> V4 a -> V4 a -> V4 a -> V4 (V4 a) forall a. a -> a -> a -> a -> V4 a V4 (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 (V3 a xaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R1 t => Lens' (t a) a _x) (V3 a xaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R2 t => Lens' (t a) a _y) (V3 a xaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R3 t => Lens' (t a) a _z) a xd) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 (V3 a yaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R1 t => Lens' (t a) a _x) (V3 a yaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R2 t => Lens' (t a) a _y) (V3 a yaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R3 t => Lens' (t a) a _z) a yd) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 (-V3 a zaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R1 t => Lens' (t a) a _x) (-V3 a zaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R2 t => Lens' (t a) a _y) (-V3 a zaV3 a -> Getting a (V3 a) a -> a forall s a. s -> Getting a s a -> a ^.Getting a (V3 a) a forall (t :: * -> *) a. R3 t => Lens' (t a) a _z) a zd) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 0 a 0 a 0 a 1) where za :: V3 a za = V3 a -> V3 a forall (f :: * -> *) a. (Metric f, Floating a) => f a -> f a signorm (V3 a -> V3 a) -> V3 a -> V3 a forall a b. (a -> b) -> a -> b $ V3 a center V3 a -> V3 a -> V3 a forall a. Num a => a -> a -> a - V3 a eye xa :: V3 a xa = V3 a -> V3 a forall (f :: * -> *) a. (Metric f, Floating a) => f a -> f a signorm (V3 a -> V3 a) -> V3 a -> V3 a forall a b. (a -> b) -> a -> b $ V3 a -> V3 a -> V3 a forall a. Num a => V3 a -> V3 a -> V3 a cross V3 a za V3 a up ya :: V3 a ya = V3 a -> V3 a -> V3 a forall a. Num a => V3 a -> V3 a -> V3 a cross V3 a xa V3 a za xd :: a xd = -V3 a -> V3 a -> a forall (f :: * -> *) a. (Metric f, Num a) => f a -> f a -> a dot V3 a xa V3 a eye yd :: a yd = -V3 a -> V3 a -> a forall (f :: * -> *) a. (Metric f, Num a) => f a -> f a -> a dot V3 a ya V3 a eye zd :: a zd = V3 a -> V3 a -> a forall (f :: * -> *) a. (Metric f, Num a) => f a -> f a -> a dot V3 a za V3 a eye rotMatrixX :: Floating a => a -> M44 a rotMatrixX :: a -> M44 a rotMatrixX a phi = V4 a -> V4 a -> V4 a -> V4 a -> M44 a forall a. a -> a -> a -> a -> V4 a V4 (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 1 a 0 a 0 a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 0 ( a -> a forall a. Floating a => a -> a cos a phi) (-a -> a forall a. Floating a => a -> a sin a phi) a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 0 ( a -> a forall a. Floating a => a -> a sin a phi) ( a -> a forall a. Floating a => a -> a cos a phi) a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 0 a 0 a 0 a 1) rotMatrixY :: Floating a => a -> M44 a rotMatrixY :: a -> M44 a rotMatrixY a phi = V4 a -> V4 a -> V4 a -> V4 a -> M44 a forall a. a -> a -> a -> a -> V4 a V4 (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 ( a -> a forall a. Floating a => a -> a cos a phi) a 0 ( a -> a forall a. Floating a => a -> a sin a phi) a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 0 a 1 a 0 a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 (-a -> a forall a. Floating a => a -> a sin a phi) a 0 ( a -> a forall a. Floating a => a -> a cos a phi) a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 0 a 0 a 0 a 1) rotMatrixZ :: Floating a => a -> M44 a rotMatrixZ :: a -> M44 a rotMatrixZ a phi = V4 a -> V4 a -> V4 a -> V4 a -> M44 a forall a. a -> a -> a -> a -> V4 a V4 (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 ( a -> a forall a. Floating a => a -> a cos a phi) (-a -> a forall a. Floating a => a -> a sin a phi) a 0 a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 ( a -> a forall a. Floating a => a -> a sin a phi) ( a -> a forall a. Floating a => a -> a cos a phi) a 0 a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 0 a 0 a 1 a 0) (a -> a -> a -> a -> V4 a forall a. a -> a -> a -> a -> V4 a V4 a 0 a 0 a 0 a 1)