linear 1.11.1 → 1.11.2
raw patch · 4 files changed
+74/−1 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Linear.Perspective: infinitePerspective :: Floating a => a -> a -> a -> M44 a
+ Linear.Perspective: lookAt :: (Epsilon a, Floating a) => V3 a -> V3 a -> V3 a -> M44 a
+ Linear.Perspective: perspective :: Floating a => a -> a -> a -> a -> M44 a
Files
- CHANGELOG.markdown +4/−0
- linear.cabal +2/−1
- src/Linear.hs +2/−0
- src/Linear/Perspective.hs +66/−0
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+1.11.2+------+* Added `Linear.Perspective`.+ 1.11.1 ------ * Added `_Point`, `relative` and a few instances for `Point`.
linear.cabal view
@@ -1,6 +1,6 @@ name: linear category: Math, Algebra-version: 1.11.1+version: 1.11.2 license: BSD3 cabal-version: >= 1.8 license-file: LICENSE@@ -59,6 +59,7 @@ Linear.Instances Linear.Matrix Linear.Metric+ Linear.Perspective Linear.Plucker Linear.Quaternion Linear.Trace
src/Linear.hs view
@@ -18,6 +18,7 @@ , module Linear.Epsilon , module Linear.Matrix , module Linear.Metric+ , module Linear.Perspective , module Linear.Quaternion , module Linear.Trace , module Linear.V0@@ -36,6 +37,7 @@ import Linear.Instances () import Linear.Matrix import Linear.Metric+import Linear.Perspective import Linear.Quaternion import Linear.Trace import Linear.V0
+ src/Linear/Perspective.hs view
@@ -0,0 +1,66 @@+---------------------------------------------------------------------------+-- |+-- Copyright : (C) 2014 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable+--+-- Common perspective transformation matrices.+---------------------------------------------------------------------------+module Linear.Perspective+ ( lookAt+ , perspective+ , infinitePerspective+ ) where++import Control.Lens hiding (index)+import Linear.V3+import Linear.V4+import Linear.Matrix+import Linear.Epsilon+import Linear.Metric++-- | Build a look at view matrix+lookAt :: (Epsilon a, Floating a) => V3 a -> V3 a -> V3 a -> M44 a+lookAt eye center up =+ V4 (V4 (xa^._x) (xa^._y) (xa^._z) xd)+ (V4 (ya^._x) (ya^._y) (ya^._z) yd)+ (V4 (-za^._x) (-za^._y) (-za^._z) zd)+ (V4 0 0 0 1)+ where za = normalize $ center - eye+ xa = normalize $ cross za up+ ya = cross xa za+ xd = -dot xa eye+ yd = -dot ya eye+ zd = dot za eye++-- | Build a matrix for a symmetric perspective-view frustum+perspective :: Floating a => a -> a -> a -> a -> M44 a+perspective fovy aspect near far =+ V4 (V4 x 0 0 0)+ (V4 0 y 0 0)+ (V4 0 0 z w)+ (V4 0 0 (-1) 0)+ where tanHalfFovy = tan $ fovy / 2+ x = 1 / (aspect * tanHalfFovy)+ y = 1 / tanHalfFovy+ z = -(far + near) / (far - near)+ w = -(2 * far * near) / (far - near)++-- | Build a matrix for a symmetric perspective-view frustum with a far plane at infinite+infinitePerspective :: Floating a => a -> a -> a -> M44 a+infinitePerspective fovy aspect near =+ V4 (V4 x 0 0 0)+ (V4 0 y 0 0)+ (V4 0 0 (-1) w)+ (V4 0 0 (-1) 0)+ where range = (tan (fovy / 2)) * near+ left = -range * aspect+ right = range * aspect+ bottom = -range+ top = range+ x = (2 * near) / (right - left)+ y = (2 * near) / (top - bottom)+ w = -2 * near