Commit graph

1105 commits

Author SHA1 Message Date
Aaron Loucks
3bd348127c Remove duplicate code in the deprecated Matrix3::look_at function 2020-12-04 19:41:27 -05:00
Aaron Loucks
c0a66d2a34 Rename Matrix3::look_at_[rh|lh] to look_to_[rh|lh]
This makes the Matrix3/4 and Decomposed `look_at_*` functions consistent
with looking at a center/focus point and `look_to_*` functions consistent
with looking in a direction.
2020-12-04 19:41:27 -05:00
Aaron Loucks
213fc580a9 Add Transform::{look_at_rh, look_at_lh} and deprecate look_at
Corresponding functions have been added to Matrix4 and Decomposed
and are now consistent.

Matrix3, Matrix2, and the Rotation trait are only partially updated.
2020-12-04 19:41:27 -05:00
aloucks
164808eebc
Quaternion memory layout changed to [x, y, z, w] (#500)
The `From` and `Into` impls for `[S; 4]` and `(S, S, S, S)` have been
changed accordingly. This is consistent with other libraries like glm,
nalgebra, and glam, as well as the glTF spec.

Note that the `Quaternion::new` constructor has **not** yet been
updated.
2020-11-23 11:22:21 -05:00
josh65536
84da664455
Now there is only one one (#513)
* Now there is only one one

* Rotation no longer has a parameter

* Moved some type parameters to associated types

* Relaxed some bounds and simplified a bound

* Removed unnecessary bound in

* Deduplicated multiplication code
2020-08-12 15:05:38 -04:00
josh65536
816c043223
Fixed opposite quaternion slerp bug (#515)
* Fixed opposite quaternion slerp bug

* Removed an unnecessary

* nlerp and slerp always take the shortest path now
2020-08-11 23:04:27 -04:00
Marco Giordano
c96cd57efc
Allow inverted near far for inverted depth fp32 (#509)
* removed assertion for inverted near far

* added extra assertion

* adding checks for ratio too small or far and near plane too close to each other

* using comparing macro

* PR feedback
2020-06-24 10:45:20 -04:00
Nathan Stoddard
8d0e3f4eae Remove Float bound from MetricSpace and InnerSpace; move Float bound to individual methods
This makes it possible to call methods like `dot` on integers.
2020-06-03 16:07:04 -04:00
Egor Larionov
9dcd9fc3dd Remove unused commented out code 2020-05-23 00:50:32 -04:00
Egor Larionov
753773cfcd Further relax InnerSpace and is_finite BaseFloat bounds 2020-05-23 00:50:32 -04:00
Egor Larionov
b9e82914db Relax Float bound {Metric,Inner}Space and Matrix traits
This makes the trait more flexible.
This contributes to #496.
2020-05-23 00:50:32 -04:00
Andrea Catania
ff1cda766d Code formatted with 2019-11-05 07:16:38 +01:00
Andrea Catania
04b21718f3 Added to the Mat3 the possibility to be constructed from a translation vector. Added tests. 2019-11-05 07:15:33 +01:00
bors[bot]
f69e781b8f
Merge #491
491: Fix Matrix2::look_at, add look_at_stable r=kvark a=blargg

## Changes

1. Fixes `Matrix2::look_at`
2. Adds tests for `look_at`
3. Adds a new function, `look_at_stable`

## Notes
I added a new function for 2d look at rotation. `look_at` is a bit weird in practice for 2d. For example, if you are making a basis matrix to orient a 2d character to look at a point, `look_at` will flip the character as they rotate past `up` or `-up` vectors. This is the best match for what look_at is supposed to do, I think.

`look_at_stable` will not flip based on orientation, you just pass in which way to flip. This is a bit easier to use to rotate 2d characters.

`look_at_stable` could have a better name. I think we can also consider removing the flip param, and just let the user flip the matrix with a transform later.

Co-authored-by: blargg <tomjankauski@gmail.com>
2019-09-03 22:13:25 +00:00
blargg
dd9f08ccee Fix Matrix2::look_at, add look_at_stable
Fix bug in look_at

Use the up vector to determine turn direction

Add look_at_stable

Matrix2::look_at calls look_at_stable
2019-09-03 17:02:11 -05:00
Norbert Nemec
5c6c378128 add "simd" test with nightly-2019-01-01 toolchain and get it working 2019-09-01 22:56:26 +02:00
Norbert Nemec
153754eb38 split off code into quaternion_simd.rs 2019-09-01 21:04:05 +02:00
Norbert Nemec
f21232a123 drop redundant copies from quaternion.rs 2019-09-01 21:04:05 +02:00
Norbert Nemec
7290d42c04 split off code into vector_simd.rs 2019-09-01 21:04:05 +02:00
Norbert Nemec
dfb8766e38 drop redundant impl_vector_default 2019-09-01 21:04:05 +02:00
Norbert Nemec
c4acb79d04 merge default_fn!() from impl_vector_default back into impl_vector 2019-09-01 21:04:05 +02:00
Norbert Nemec
64fde2002b replace default -> default_fn!() 2019-09-01 21:04:04 +02:00
Norbert Nemec
caa8ee13fd merge changes from impl_vector to impl_vector_default 2019-09-01 21:04:04 +02:00
Norbert Nemec
40d0afd036 drop redundant impl_scalar_ops_default 2019-09-01 21:04:04 +02:00
Norbert Nemec
1c7c889921 drop redundancy of impl_operator_default and impl_assignment_operator_default 2019-09-01 21:04:04 +02:00
Norbert Nemec
fde164293b default_fn! macro 2019-09-01 21:04:04 +02:00
Norbert Nemec
935f389983 replace deprecated try! macro by ? operator 2019-09-01 15:16:03 +02:00
Mick van Gelderen
a63843c30a Implement zip for VectorN and PointN
Impelements #485
2019-06-10 10:51:30 +02:00
bors[bot]
627d1c589f Merge #483
483: Make `rand` dependency optional (but enabled by default) r=kvark a=LukasKalbertodt

Closes #481 

This PR leaves the feature enabled by default so that this can be released as a minor version soon. (I would suggest to disable it by default in future versions, but that's another discussion.)

The changes are pretty straight forward with one catch: I changed some `use` statements to nested imports (otherwise, there would be even more `#[cfg(feature = "rand")]` lines). Nested imports were stabilized in 1.25 (see [the edition guide on this feature](https://doc.rust-lang.org/edition-guide/rust-2018/module-system/nested-imports-with-use.html)). I'm not sure how cgmaths policy on minimum compiler version is. Maybe cgmath already requires a >= 1.25 compiler for other reasons. If my change is a problem, just tell me and I will change the imports back.

Co-authored-by: Lukas Kalbertodt <lukas.kalbertodt@gmail.com>
2019-05-03 14:47:52 +00:00
Lukas Kalbertodt
4bd8ebb38d
Make rand dependency optional (but enabled by default)
Most users probably don't use the rand impls, so the `rand` crate pulls
a large number of dependencies into the dependency tree which is just
wasted compilation time.
2019-05-02 11:24:50 +02:00
Jonathan Plotner
107f90c2e5
fixed dropped 's' in trait.
Grammatical change from singular to plural.
2019-04-25 12:47:35 -07:00
Michael Tang
c1f808d928 Add documentation for <Quaternion as Rotation<Point3<S>>>::rotate_vector. Fixes #479. 2019-03-22 22:01:47 -07:00
bors[bot]
9402a01a5b Merge #476
476: Add short constructors for points, to match the ones for vectors r=kvark a=nstoddard

In my code I find that I need to create points almost as often as vectors, so having short constructors is helpful.

Co-authored-by: Nathan Stoddard <nstoddard@users.noreply.github.com>
2019-02-25 16:34:53 +00:00
Ben Boeckel
2d2c501074 Angle: add the normalize_signed method
This method is like `normalize` except that it normalizes to have an
absolute value of no more than `turn_div_2`.
2019-01-16 16:01:46 -05:00
Nathan Stoddard
2cf020351e Add short constructors for points, to match the ones for vectors 2019-01-14 15:53:28 -08:00
bors[bot]
a570349a0d Merge #472
472: [breaking] Move lerp() from InnerSpace to VectorSpace r=Rhuagh a=Vlad-Shcherbina

Because it does not require dot product.
Along the way, fix the comment.

Fixes #471.

Co-authored-by: Vlad Shcherbina <vlad.shcherbina@gmail.com>
2019-01-14 17:10:16 +00:00
Nathan Stoddard
c438536dac Declare the rest of the constructors to be const
This requires removing trait bounds from the constructors, and for Euler, removing the trait bound from the struct.
2019-01-13 22:42:16 -08:00
Nathan Stoddard
19f75b88e6 Declare point constructors to be const
Also add const to a vector constructor that I missed before.

Constructors for other types can't yet be const, because the compiler gives an error: "trait bounds other than `Sized` on const fn parameters are unstable".
2019-01-12 19:59:44 -08:00
Nathan Stoddard
9a20f1031c Declare vector constructors to be const
This makes it easier to create vectors in constants.
2019-01-12 14:53:20 -08:00
Bastien Orivel
036604ed49 Update some dependencies and bump version 2018-12-28 21:01:18 +01:00
Vlad Shcherbina
5512b6a0f7 [breaking] Move lerp() from InnerSpace to VectorSpace
Because it does not require dot product.
Along the way, fix the comment.

Fixes #471.
2018-11-22 17:43:21 +03:00
Lukas Kalbertodt
e58bd7b878
Fix links to OpenGL API in docs
Those links were broken before, since the [] and () part were split
into two different lines. This also caused warnings on nightly, which
are now fixed.
2018-07-11 10:56:06 +02:00
Victor Koenders
bd88d9e93f Fixed a compiler issue with the 'simd' feature 2018-06-08 14:35:12 +02:00
Victor Koenders
cdb0e8c8a1 Bumped rand and fixed compiler issues 2018-06-08 13:39:02 +02:00
Alex Butler
a3965d414d
Update approx -> 0.2 2018-05-23 12:43:52 +01:00
Richard Dodd
2a7e2ebda3 Fix simd 2018-04-29 17:04:49 +01:00
Richard Dodd
f8e92ed327 Add is_finite to array and quaternion 2018-04-29 14:21:42 +01:00
Richard Dodd
f82e421e2c Fix for simd 2018-04-28 15:09:45 +01:00
Richard Dodd
4fede94df5 Add is_finite method to vectors and matrices.
This method is useful in debug to error early when some kind of
singularity is encountered.
2018-04-28 11:34:45 +01:00
Osspial
def53ca371 Fix some documentation 2018-03-16 16:32:46 -04:00