module Diagrams.ThreeD.Deform ( parallelX0, perspectiveX1, facingX , parallelY0, perspectiveY1, facingY , parallelZ0, perspectiveZ1, facingZ ) where import Control.Lens import Diagrams.Deform import Diagrams.TwoD.Deform import Linear.V3 import Linear.Vector -- | The parallel projection onto the plane z=0 parallelZ0 :: (R3 v, Num n) => Deformation v v n parallelZ0 = Deformation (_z .~ 0) -- | The perspective division onto the plane z=1 along lines going -- through the origin. perspectiveZ1 :: (R3 v, Functor v, Fractional n) => Deformation v v n perspectiveZ1 = Deformation $ \p -> p ^/ (p ^. _x) facingZ :: (R3 v, Functor v, Fractional n) => Deformation v v n facingZ = Deformation $ \p -> let z = p ^. _z in p ^/ z & _z .~ z