Commit Graph

25 Commits

Author SHA1 Message Date
Mathias Agopian
22be5f17b4 conversion between vec<T> and vec<U> are now implicit
This change allows for e.g. to call a method that takes double4 with
float4 parameters -- just like it would work with double and floats.
2019-04-19 17:31:37 -07:00
Mathias Agopian
e63282c9a2 removed unnecessary arithmetic check 2019-04-19 17:31:37 -07:00
Mathias Agopian
7795de4ac2 added vec{2|3|4}<T>
We can now use for e.g. vec4<float> instead of float4, this is
useful for templated code. The existing solution was to reach
out to the math::detail::TVec<> class.
2019-04-19 17:31:37 -07:00
Mathias Agopian
beb2f74bdc Better frustum/box intersection, make code more robust
- switched the frustum/box intersection code to double. With large 
scenes, we were getting very wrong intersection points (up to 1m off).
This doesn't seem to happen with doubles. 

- reject points that end-up outside the frustum

- made LiSPSM code more robust against the problem above. When points
were falsely placed behind the near plane (due to bad intersections),
we could end-up with NaN (sqrt of negative numbers).
2019-04-17 18:12:31 -07:00
Mathias Agopian
45fdece973 Fix documentation typos 2019-04-08 16:42:21 -07:00
Philip Rideout
10251821c6 filagui: Introduce widget for manipulating vectors.
This is our first ImGui extension, it draws a draggable 3D arrow for
manipulating a unit vector. This is especially useful for tweaking the
light direction.
2019-04-04 10:59:38 -07:00
Mathias Agopian
2f34f9f857 remove vector comparison operators
they're dangerous as they will make things like
std::min() work, but probably won't do the
right thing.
2019-03-14 13:13:57 -07:00
Romain Guy
6b39569c14 Defend against Windows' near/far defines (#985) 2019-03-14 11:49:43 -07:00
Philip Rideout
0e4ca0bc7b Fix falling streetcar / quaternion slerp. 2019-03-08 17:50:15 -08:00
Philip Rideout
8d979a7cb8 Resurrect quat slerp NaN protection.
In my previous NaN-related commit, I added a conditional similar to the
one seen in glMatrix, but this was insufficient for the interpolation
seen in a glTF skinning test because a divide-by-zero was occuring later
in the function. This commit simply adds back the previous protection.
2019-03-06 12:36:20 -08:00
Mathias Agopian
7b3475f1da API change: rename matrix factory functions
scale() -> scaling()
translate() -> translation()
rotate() -> rotation()

These static functions create a matrix, they don't modify it.
Fixes #826
2019-03-04 14:34:02 -08:00
Philip Rideout
c65e561c59 Fix nans in math::slerp, second attempt.
My earlier fix (3b373e5) was insufficient in some cases, this new
approach is cribbed from glMatrix.
2019-02-26 21:03:49 -08:00
Philip Rideout
3b373e5d05 Fix nans in math::slerp. 2019-02-14 20:54:56 -08:00
prideout
5ee359cf40 Move math namespace to fix #746. 2019-02-07 09:23:07 -08:00
Mathias Agopian
7ab25ff4a2 improve libmath benchmark 2018-12-05 17:19:47 -08:00
Philip Rideout
a7d6af8d22 filamesh: Add support for TEXCOORD_SNORM16. 2018-12-03 14:18:12 -08:00
Mathias Agopian
6d68a4a4c6 libmath benchmarks 2018-12-03 11:58:30 -08:00
Philip Rideout
91abaf575b Add tangents utility to fix #532.
I tested this by writing a quick-and-dirty Sphere demo.
2018-11-28 11:27:37 -08:00
shartte
9ab9333fa5 Fixes various MSVC issues in public headers (#523) 2018-11-26 09:17:19 -08:00
Mathias Agopian
d1b19efa55 a fast approximation of pow() and pow(x, 2.2f)
fast::pow(x, 2.2f) is about 100x faster than std::pow.
std::pow(x, 2.2f) takes roughly 1000 cycles.
2018-11-21 13:46:56 -08:00
Cory Bloor
a831c507cf Add missing include to math/mat3.h (#157)
CHAR_BIT is defined in <limits.h>
2018-08-27 14:06:32 -07:00
Romain Guy
959c21b172 mat2 and mat3 need vec2 and vec3 for scale/translate (#155) 2018-08-27 11:14:10 -07:00
Romain Guy
39ca6d146f Fix ambiguities with translate() and scale() (#154)
These two functions expect a vector of the same size as the
matrix's storage vectors (float4 for a mat4f for instance) which
has two major issues:

- The vector must end with 1 for homogeneous coordinates to work
- Passing a single scalar (mat4f::scale(0.5)) creates a matrix
  whose diagonal is set to that scalar, thus breaking homogeneous
  coordinates

With this change scale and translate expect a vector who dimensionality
is 1 less that of the matrix's underlying storage vectors. i.e. a float3
for mat4f.
2018-08-27 10:21:13 -07:00
Mathias Agopian
63e2f69c16 add more pseudo vector swizzle to lib math
vec3: yz
vec4: yz, zw, yzw
2018-08-16 22:36:30 -07:00
Romain Guy
b3d758f3b3 Initial commit 2018-08-03 10:38:22 -07:00