Logan Forman c24e4ff873 HMM2.0 (#149)
These changes were all made by @dev-dwarf. Many thanks for his work on this!

* Renaming

* First Pass on 2.0UpdateTool

* Another pass on UpdateTool, changed name

* Another pass on UpdateTool, changed name

* Do Renaming

* Working on Angles Consistency

* Passing Coverage

* Remove unused arc-tangent functions

* Change macro defaults

By default if user is overriding trig functions assume their input and internal units are the same.

* wrap in AngleDeg instead of AngleRad

* Remove HMM_PREFIX configuration

* Fix for Slerp

https://discord.com/channels/239737791225790464/489148972305350656/1055167647274246265

Justified by most implementations of Slerp. EX: http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

* Handedness Changes

* More renaming. C11 _Generics

Generics enable by default when available (see lines 97-104). User can also force them by defining HANDMADE_MATH_C11_GENERICS

Also fixed some missed things w.r.t renaming. My old tool didn't catch cases like HMM_MultiplyVec3f needing to be HMM_MulV3F instead of HMM_MulV3f.

* Reuse more SSE codepaths for Quaternions

Also improved quaternion tests. More work could be done here, see discussion here about optimizing slerp: https://discord.com/channels/239737791225790464/489148972305350656/1055167647274246265

* Just saving these alternate versions of SLerp

* Reduce V4/M4 Linear Comb. codepaths

* Simple implementation of 2x2 and 3x3 basic matrix operations.

Also renamed Transpose to TransposeM4, so that we can have TransposeM2,M3

* Norm is dead! Long live Norm!

As can be seen from the tests, precision has declined quite a bit from using the FastNorm implementations for various things. We can only guarantee about 0.001f precision for anything where a norm happens now. If this is undesired we can change back easily.

* Started work on Matrix Inverses

TODO: Tests for simple 4x4 Inverses

* Matrix Inverses + Tests

* Generics for Matrices and Rename MXd/f functions

* Fixes + Better Output for UpdateTool

* I think I count as a contributor : )

* Ported UpdateTool, Inlined my library code.

* Moved tool to different repo

https://github.com/dev-dwarf/HMM2.0UpdateTool

* Remove small test change

* Found some more references to atan functions

* Standardize angle function names, use short names

* Remove other slerp comments

* woops that wasnt meant to be commited.

* Finish changing ToRadians to ToRad

* Fix [] overloads

per https://discord.com/channels/239737791225790464/600063880533770251/1051600188302692402

* Tests for 2x2, 3x3 Matrices and Other Matrix Ops

* Add an option to use Z: [0, 1] range for projection matrices.

This will make HMM more convenient to use with other graphics APIs such as Direct3d and Metal.

* Update test imports

* #if should've been #ifdef!

* Implement requested changes
2023-01-22 17:34:50 -06:00
2023-01-22 17:34:50 -06:00
2019-07-31 16:43:56 -05:00
2017-04-07 08:47:54 -05:00
2023-01-22 17:34:50 -06:00
2017-10-31 11:04:56 -05:00
2021-08-31 17:11:42 -07:00

Handmade Math

Build Status

A single-file, cross-platform, public domain game math library for C/C++.

To get started, go download the latest release.


Version Changes
1.13.0 Fully inlined HandmadeMath.h. No need for HANDMADE_MATH_IMPLEMENTATION anymore
1.12.1 Added extra parentheses around some macros
1.12.0 Added Unary Minus operator for HMM_Vec2, HMM_Vec3, and HMM_Vec4.
1.11.1 Added HMM_PREFIX macro to a few functions that were missing it.
1.11.0 Added ability to customize or remove the default HMM_ prefix on function names by defining a macro called HMM_PREFIX(name).
1.10.1 Removed stdint.h, this doesn't exist on some really old compilers and we didn't really use it anyways.
1.10.0 Made HMM_Perspective use vertical FOV instead of horizontal FOV for consistency with other graphics APIs.
1.9.0 Added SSE versions of quaternion operations.
1.8.0 Added fast vector normalization routines that use fast inverse square roots.
1.7.1 Changed operator[] to take a const ref int instead of an int.
1.7.0 Renamed the 'Rows' member of hmm_mat4 to 'Columns'. Since our matrices are column-major, this should have been named 'Columns' from the start. 'Rows' is still present, but has been deprecated.
1.6.0 Added array subscript operators for vector and matrix types in C++. This is provided as a convenience, but be aware that it may incur an extra function call in unoptimized builds.
1.5.1 Fixed a bug with uninitialized elements in HMM_LookAt.
1.5.0 Changed internal structure for better performance and inlining. As a result, HANDMADE_MATH_NO_INLINE has been removed and no longer has any effect.
1.4.0 Fixed bug when using C mode. SSE'd all vec4 operations. Removed zeroing for better performance.
1.3.0 Removed need to #define HANDMADE_MATH_CPP_MODE. C++ definitions are now included automatically in C++ environments.
1.2.0 Added equality functions for HMM_Vec2, HMM_Vec3, and HMM_Vec4, and SSE'd HMM_MultiplyMat4 and HMM_Transpose.
1.1.5 Added Width and Height to HMM_Vec2, and made it so you can supply your own SqrtF.
1.1.4 Fixed SSE being included on platforms that don't support it, and fixed divide-by-zero errors when normalizing zero vectors.
1.1.3 Fixed compile error in C mode
1.1.2 Fixed invalid HMMDEF's in the function definitions
1.1.1 Resolved compiler warnings on gcc and g++
1.1 Quaternions!
1.0 Lots of testing
0.7 Added HMM_Vec2, and HMM_Vec4 versions of HMM_LengthSquared, HMM_Length, and HMM_Normalize.
0.6 Made HMM_Power faster, Fixed possible efficiency problem with HMM_Normalize, RENAMED HMM_LengthSquareRoot to HMM_LengthSquared, RENAMED HMM_RSqrtF to HMM_RSquareRootF, RENAMED HMM_SqrtF to HMM_SquareRootF, REMOVED Inner function (user should use Dot now), REMOVED HMM_FastInverseSquareRoot function declaration
0.5.2 Fixed SSE code in HMM_SqrtF and HMM_RSqrtF
0.5.1 Fixed HMM_Translate producing row-major matrices, ensured column-major order for matrices throughout
0.5 Added scalar operations on vectors and matrices, added += and -= for hmm_mat4, reconciled headers and implementations, tidied up in general
0.4 Added SSE Optimized HMM_SqrtF, HMM_RSqrtF, Removed use of C Runtime
0.3 Added +=,-=, *=, /= for hmm_vec2, hmm_vec3, hmm_vec4
0.2b Disabled warning C4201 on MSVC, Added 64bit precision on HMM_PI
0.2a Prefixed Macros
0.2 Updated Documentation, Fixed C Compliance, Prefixed all functions, and added better operator overloading
0.1 Initial Version

FAQ

What's the license?

This library is in the public domain. You can do whatever you want with it.

Where can I contact you to ask questions?

Feel free to make Github issues for any questions, concerns, or problems you encounter.

Description
A simple math library for games and computer graphics. Compatible with both C and C++. Public domain and easy to modify.
Readme CC0-1.0 3.8 MiB
Languages
C 95.7%
Python 2.2%
Makefile 1.2%
Batchfile 0.8%