All notable changes to this project will be documented in this file, following the format defined at keepachangelog.com. This project adheres to Semantic Versioning.
- Refactored dependencies of experimental "specialization" feature into default_fn! macro to reduce code duplication and complexity. Currently only needed for non-functional SIMD feature.
- Refactored SIMD code into separate source files. See README.md for details.
- Breaking: Quaternion memory layout changed to
[x, y, z, w]
. TheFrom
andInto
impls for[S; 4]
and(S, S, S, S)
have been changed accordingly.
- Add
VectorN::zip
andPointN::zip
- Add signed
Angle
normalization
- Move
lerp()
fromInnerSpace
toVectorSpace
const
constructors
v0.16.1 - 2018-03-21
- Implement
ElementWise
trait for point types - Add
map
function to points and vectors
- Remove
BaseNum
trait requirement forPointN::new
functions
v0.16.0 - 2018-01-03
- Add
InnerSpace::project_on
- Add
Array::len
- Re-export
Bounded
and implement for vectors, points, and angles - Add vector subtraction to
EuclideanSpace
- Add swizzle functions behind that
"swizzle"
feature - Add
Matrix4::look_at_dir
- Return
Option
from cast functions
v0.15.0 - 2017-07-30
- Implement
mint
conversions behind a feature - Add
Quaternion::cast
- Rename
use_simd
feature tosimd
- Rename
eders
feature toserde
- Fix matrix inversions for small determinants
v0.14.1 - 2017-05-02
- Add a workaround for rust-lang/rust#41478, and in the process cleaned up some type projections for angles
v0.14.0 - 2017-04-26
- Constrain
VectorSpace
,Rotation
, andAngle
byiter::Sum
- Constrain
SquareMatrix
byiter::Product
v0.13.1 - 2017-04-22
- Update
serde
andserde_derive
to version1.0
.
- Add optional
use_simd
feature to improve the performance ofVector4<f32>
,Matrix4<f32>
andQuaternion<f32>
. According to @DaseinPhaos in #394, under the given benchmark certain operations were able to become up to 60% faster. - Add component wise casting for the matrix and point types
- Update
serde
to version0.9
, and useserde_derive
instead ofserde_macros
.
v0.12.0 - 2016-09-14
- Use approx for approximate equality comparisons
- Remove
#[repr(packed)]
from all structs where it was specified - Update serde to 0.8
v0.11.0 - 2016-08-17
Quaternion::from_arc
- Change the angle types to be tuple structs
- Make from-angle constructors take generic
Into<Rad<S>>
values - Fix
Decomposed::concat
implementation
v0.10.0 - 2016-05-11
- A
MetricSpace
trait for types that have a distance between elements. EuclideanSpace::{midpoint, centroid}
functions with default implementations.Vector1
andPoint1
structs.- Serde support behind the
eders
feature flag. - An
ApproxEq
implementation forDecomposed
.
- Depend on the
num-traits
crate rather thannum
, seeing as we only use the traits innum
.num_traits
has also been re-exported so that you can more easily use these in your project. - Use an
Euler
type for euler angle conversions. - Constrain
InnerSpace
byMetricSpace
. - Constrain
Rotation
byOne
- Implement
Transform
andTransform3
forMatrix4
. - Implement
Transform
,Transform2
, andTransform3
forMatrix4
. - Fix
Euler
-Quaternion
andQuaternion
-Euler
conversions. The axes are now correct, and the angles are applied in x-y-z order. The conversion now matches the conversion from axis angle. - Fix
Euler
-{Matrix3, Matrix4}
conversions.
Rotation::transform_as_point
AffineMatrix3
Rotation::invert_self
Matrix::invert_self
v0.9.1 - 2016-04-20
- Fix angle assignment operators so that they actually mutate
self
.
v0.9.0 - 2016-04-19
- Assignment operators implementations have been stabilised, to coincide with their stabilisation in Rust 1.8.
- Renames
Vector
trait toVectorSpace
. - Renames
EuclideanVector
toInnerSpace
. - Renames
Point
toEuclideanSpace
, andPoint::Vector
toEuclideanSpace::Diff
. Quaternion
s now implementVectorSpace
andInnerSpace
for the functions they share.- The
Matrix
trait is now constraint byVectorSpace
, withMatrix::Element
removed in favor ofVectorSpace::Scalar
.
v0.8.0 - 2016-04-06
- Implements
fmt::Debug
forBasis2
,Basis3
, andAffineMatrix3
- A
prelude
module for easy importing of common traits. - Constrained conversion functions for assisting in situations where type inference is difficult.
- An
ElementWise
trait for non-mathematical element-wise operations. - A default implementation for
EuclideanVector::angle
.
- Improves the
fmt::Debug
impls forVector
,Matrix
,Point
,Decomposed
,Quaternion
andAngle
to make them easier to derive, and have clearer formatting. - Marks vectors, points, matrices, and angles as
#[repr(C, packed)]
. - Renames the
Vector::{length, length2}
functions toVector::{magnitude, magnitude2}
. - Move
Angle::new
to be directly implemented on theRad
andDeg
types. - Move
Vector::dot
toEuclideanVector
trait. - Move
Vector::from_value
toArray
trait.
- The non-mathematical operator trait implementations have been removed from
the
Vector
trait, in favor of theElementWise
trait. Angle::equiv
.- Remove
neg_self
method on vectors and matrices.
v0.7.0 - 2015-12-23
- Add missing by-ref and by-val permutations of
Vector
,Matrix
,Point
,Quaternion
andAngle
operators. - Ease lifetime constraints by removing
'static
from some scalar type parameters. - Weaken type constraints on
perspective
function to take anInto<Rad<S>>
. - Add
Angle::new
for constructing angles from a unitless scalar. - Implement assignment operators for nightly builds, enabled by the
"unstable"
feature.
Vector
,Matrix
,Point
, andAngle
are now constrained to require specific operators to be overloaded. This means that generic code can now use operators, instead of the operator methods.- Take a
Rad
forProjectionFov::fovy
, rather than arbitraryAngle
s. This simplifies the signature ofPerspectiveFov
fromPerspectiveFov<S, A>
toPerspectiveFov<S>
. - The following trait constraints were removed from
Angle
:Debug
,ScalarConv
,Into<Rad<S>>
,Into<Deg<S>>
. Angle
no longer requiresOne
, and the implementations have been removed fromDeg
andRad
. This is because angles do not close over multiplication, and therefore cannot have a multiplicative identity. If we were truly accurate,Angle * Angle
would return anAngle^2
(not supported by the current api).- Make remainder operators on
Angle
s make sense from the perspective of dimensional analysis. - Moved free trigonometric functions onto
Angle
.
- Remove redundant
Point::{min, max}
methods - these are now covered by theArray::{min, max}
methods that were introduced in 0.5.0. - Removed
ToComponents
,ToComponents2
, andToComponents3
. If you were relying onToComponents::decompose
, you can produce the same effect by accessing the fields onDecomposed
directly. To create the scale vector, use:Vector::from_value(transform.scale)
. - Removed
CompositeTransform
,CompositeTransform2
, andCompositeTransform3
. - Remove
Vector::one
. Vectors don't really have a multiplicative identity. If you really want aone
vector, you can do something like:Vector::from_value(1.0)
. - Remove operator methods from
Vector
,Matrix
,Point
, andAngle
traits in favor of operator overloading. - Remove
*_self
methods fromVector
,Matrix
,Point
, andAngle
. The operator methods can be used via the unstable assignment operators. - Remove
#[derive(Hash)]
fromDeg
andRad
. This could never really be used these types, because they expect to be given aBaseFloat
under normal circumstances.
v0.6.0 - 2015-12-12
- This CHANGELOG for keeping track of notable changes.
Matrix4::{from_scale, from_nonuniform_scale}
for easily constructing homogeneous scale matrices.
- Renamed
SquareMatrix::one
toSquareMatrix::identity
.identity
is easier to search for, and the more common name for the multiplicative identity for matrices. - Matrix impls have now been constrained to
S: BaseFloat
.
v0.5.0 - 2015-11-20
- Take many point and vector parameters by value.
- Take point and vector operator overloads by value.
- Divide
Matrix
trait intoMatrix
andSquareMatrix
, opening the door for non-square matrices in the future. - Make many trait type parameters associated types.
- Move element-wise methods from
Vector
andPoint
onto theArray1
trait, and rename it toArray
. - Make pointer access methods on
Array
match the naming scheme of those in the standard library.
- Removed collision types:
Ray
,Plane
,Frustum
,Aabb2
,Aabb3
Obb2
,Obb3
Sphere
,Cylinder
. These can now be found at csherratt/collision-rs. - Remove
Array2
trait, moving methods onto theMatrix
trait.