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]. TheFromandIntoimpls for[S; 4]and(S, S, S, S)have been changed accordingly.
- Add
VectorN::zipandPointN::zip
- Add signed
Anglenormalization
- Move
lerp()fromInnerSpacetoVectorSpace constconstructors
v0.16.1 - 2018-03-21
- Implement
ElementWisetrait for point types - Add
mapfunction to points and vectors
- Remove
BaseNumtrait requirement forPointN::newfunctions
v0.16.0 - 2018-01-03
- Add
InnerSpace::project_on - Add
Array::len - Re-export
Boundedand implement for vectors, points, and angles - Add vector subtraction to
EuclideanSpace - Add swizzle functions behind that
"swizzle"feature - Add
Matrix4::look_at_dir
- Return
Optionfrom cast functions
v0.15.0 - 2017-07-30
- Implement
mintconversions behind a feature - Add
Quaternion::cast
- Rename
use_simdfeature tosimd - Rename
edersfeature 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, andAnglebyiter::Sum - Constrain
SquareMatrixbyiter::Product
v0.13.1 - 2017-04-22
- Update
serdeandserde_deriveto version1.0.
- Add optional
use_simdfeature 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
serdeto version0.9, and useserde_deriveinstead 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::concatimplementation
v0.10.0 - 2016-05-11
- A
MetricSpacetrait for types that have a distance between elements. EuclideanSpace::{midpoint, centroid}functions with default implementations.Vector1andPoint1structs.- Serde support behind the
edersfeature flag. - An
ApproxEqimplementation forDecomposed.
- Depend on the
num-traitscrate rather thannum, seeing as we only use the traits innum.num_traitshas also been re-exported so that you can more easily use these in your project. - Use an
Eulertype for euler angle conversions. - Constrain
InnerSpacebyMetricSpace. - Constrain
RotationbyOne - Implement
TransformandTransform3forMatrix4. - Implement
Transform,Transform2, andTransform3forMatrix4. - Fix
Euler-QuaternionandQuaternion-Eulerconversions. 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_pointAffineMatrix3Rotation::invert_selfMatrix::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
Vectortrait toVectorSpace. - Renames
EuclideanVectortoInnerSpace. - Renames
PointtoEuclideanSpace, andPoint::VectortoEuclideanSpace::Diff. Quaternions now implementVectorSpaceandInnerSpacefor the functions they share.- The
Matrixtrait is now constraint byVectorSpace, withMatrix::Elementremoved in favor ofVectorSpace::Scalar.
v0.8.0 - 2016-04-06
- Implements
fmt::DebugforBasis2,Basis3, andAffineMatrix3 - A
preludemodule for easy importing of common traits. - Constrained conversion functions for assisting in situations where type inference is difficult.
- An
ElementWisetrait for non-mathematical element-wise operations. - A default implementation for
EuclideanVector::angle.
- Improves the
fmt::Debugimpls forVector,Matrix,Point,Decomposed,QuaternionandAngleto 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::newto be directly implemented on theRadandDegtypes. - Move
Vector::dottoEuclideanVectortrait. - Move
Vector::from_valuetoArraytrait.
- The non-mathematical operator trait implementations have been removed from
the
Vectortrait, in favor of theElementWisetrait. Angle::equiv.- Remove
neg_selfmethod on vectors and matrices.
v0.7.0 - 2015-12-23
- Add missing by-ref and by-val permutations of
Vector,Matrix,Point,QuaternionandAngleoperators. - Ease lifetime constraints by removing
'staticfrom some scalar type parameters. - Weaken type constraints on
perspectivefunction to take anInto<Rad<S>>. - Add
Angle::newfor constructing angles from a unitless scalar. - Implement assignment operators for nightly builds, enabled by the
"unstable"feature.
Vector,Matrix,Point, andAngleare 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
RadforProjectionFov::fovy, rather than arbitraryAngles. This simplifies the signature ofPerspectiveFovfromPerspectiveFov<S, A>toPerspectiveFov<S>. - The following trait constraints were removed from
Angle:Debug,ScalarConv,Into<Rad<S>>,Into<Deg<S>>. Angleno longer requiresOne, and the implementations have been removed fromDegandRad. This is because angles do not close over multiplication, and therefore cannot have a multiplicative identity. If we were truly accurate,Angle * Anglewould return anAngle^2(not supported by the current api).- Make remainder operators on
Angles 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 onDecomposeddirectly. 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 aonevector, you can do something like:Vector::from_value(1.0). - Remove operator methods from
Vector,Matrix,Point, andAngletraits in favor of operator overloading. - Remove
*_selfmethods fromVector,Matrix,Point, andAngle. The operator methods can be used via the unstable assignment operators. - Remove
#[derive(Hash)]fromDegandRad. This could never really be used these types, because they expect to be given aBaseFloatunder 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::onetoSquareMatrix::identity.identityis 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
Matrixtrait intoMatrixandSquareMatrix, opening the door for non-square matrices in the future. - Make many trait type parameters associated types.
- Move element-wise methods from
VectorandPointonto theArray1trait, and rename it toArray. - Make pointer access methods on
Arraymatch the naming scheme of those in the standard library.
- Removed collision types:
Ray,Plane,Frustum,Aabb2,Aabb3Obb2,Obb3Sphere,Cylinder. These can now be found at csherratt/collision-rs. - Remove
Array2trait, moving methods onto theMatrixtrait.