fwgl-0.1.2.1: FWGL/Utils.hs
module FWGL.Utils (
screenScale,
perspective4,
perspectiveView
) where
import FRP.Yampa
import FWGL.Input
import FWGL.Graphics.Custom
import FWGL.Vector
-- | Generate a view matrix that transforms the pixel coordinates in OpenGL
-- coordinates.
screenScale :: SF (Input a) M3
screenScale = size >>^ \(x, y) -> scaleMat3 (V2 (2 / fromIntegral x)
(2 / fromIntegral y))
-- | Generate a perspective view matrix using the aspect ratio of the
-- framebuffer.
perspective4 :: Float -- ^ Far
-> Float -- ^ Near
-> Float -- ^ FOV
-> SF (Input a) M4
perspective4 f n fov =
size >>^ \(w, h) -> perspectiveMat4 f n fov
(fromIntegral w / fromIntegral h)
-- | Combine a perspective and a view matrix.
perspectiveView :: Float -- ^ Far
-> Float -- ^ Near
-> Float -- ^ FOV
-> SF (Input a, M4) M4
perspectiveView far near fov =
perspective4 far near fov *** identity
>>^ \(perspMat, viewMat) -> mul4 viewMat perspMat