A simple math library for games and computer graphics. Compatible with both C and C++. Public domain and easy to modify.
After far too long, we are happy to release Handmade Math 2.0. Handmade Math 2.0 introduces the following new features and changes:
A concise naming scheme. Handmade Math 1.0 has extremely verbose names. For version 2, we've reworked them to use a terse naming scheme that will make expressions much more readable. Here are some examples:
HMM_MultiplyMat4ByVec4
-> HMM_MulM4V4
HMM_MultiplyVec3f
-> HMM_MulV3F
HMM_EqualsVec4
-> HMM_EqV4
This is obviously an extremely breaking change, but to ease the transition, we provide a tool to automatically rename Handmade Math functions and types in your codebase. See the update
folder of the repo.
Matrix inverses. We are happy to finally provide our most long-requested feature. We now have a variety of functions for matrix inverses.
2x2 and 3x3 matrices. We now provide types HMM_Mat2
and HMM_Mat3
.
C11 generics. C programmers can now use "overloaded" functions like HMM_Add
instead of HMM_AddV2
, HMM_AddV3
, etc. Your expressions can now be a little more readable!
Consistent (and configurable) angle units. Handmade Math 1.0 used radians for some operations and degrees for others. Handmade Math 2.0 makes all functions use the same angle units - but also makes those units configurable, so you can choose to use radians, degrees, or turns across your codebase. See the documentation in HandmadeMath.h
.
Left-handed and right-handed operations. Handmade Math 2.0 has both left-handed and right-handed versions of all operations where handedness applies.
This release would not be possible without the help of @dev-dwarf. Many thanks for his contributions!
Other breaking changes:
#define HANDMADE_MATH_PROVIDE_MATH_FUNCTIONS
in addition to #define HMM_SINF
etc.HMM_ExpF
, HMM_LogF
, HMM_Power
, and HMM_PowerF
have been removed. They were not used internally and provided no benefit.HMM_PREFIX
has been removed. If you wish to use a different prefix, find and replace within HandmadeMath.h
.HMM_InvSqrtF
(formerly HMM_RSquareRootF
) no longer does a fast inverse square root under any circumstances. It now always does a full-precision square root. This is to ensure consistent results on all platforms.This is a release candidate for Handmade Math 2.0. Please try it out and give us feedback.
Changes from last release candidate:
HANDMADE_MATH_USE_NDC_Z01
define has been removed. NDC options are now explicit in the function names, just like handedness. (#154)After far too long, we are happy to release Handmade Math 2.0. Handmade Math 2.0 introduces the following new features and changes:
A concise naming scheme. Handmade Math 1.0 has extremely verbose names. For version 2, we've reworked them to use a terse naming scheme that will make expressions much more readable. Here are some examples:
HMM_MultiplyMat4ByVec4
-> HMM_MulM4V4
HMM_MultiplyVec3f
-> HMM_MulV3F
HMM_EqualsVec4
-> HMM_EqV4
This is obviously an extremely breaking change, but to ease the transition, we provide a tool to automatically rename Handmade Math functions and types in your codebase. See the update
folder of the repo.
Matrix inverses. We are happy to finally provide our most long-requested feature. We now have a variety of functions for matrix inverses.
2x2 and 3x3 matrices. We now provide types HMM_Mat2
and HMM_Mat3
.
C11 generics. C programmers can now use "overloaded" functions like HMM_Add
instead of HMM_AddV2
, HMM_AddV3
, etc. Your expressions can now be a little more readable!
Consistent (and configurable) angle units. Handmade Math 1.0 used radians for some operations and degrees for others. Handmade Math 2.0 makes all functions use the same angle units - but also makes those units configurable, so you can choose to use radians, degrees, or turns across your codebase. See the documentation in HandmadeMath.h
.
Left-handed and right-handed operations. Handmade Math 2.0 has both left-handed and right-handed versions of all operations where handedness applies.
This release would not be possible without the help of @dev-dwarf. Many thanks for his contributions!
Other breaking changes:
#define HANDMADE_MATH_PROVIDE_MATH_FUNCTIONS
in addition to #define HMM_SINF
etc.HMM_ExpF
, HMM_LogF
, HMM_Power
, and HMM_PowerF
have been removed. They were not used internally and provided no benefit.HMM_PREFIX
has been removed. If you wish to use a different prefix, find and replace within HandmadeMath.h
.This is a release candidate for Handmade Math 2.0. Please try it out and give us feedback.
After far too long, we are happy to release Handmade Math 2.0. Handmade Math 2.0 introduces the following new features and changes:
A concise naming scheme. Handmade Math 1.0 has extremely verbose names. For version 2, we've reworked them to use a terse naming scheme that will make expressions much more readable. Here are some examples:
HMM_MultiplyMat4ByVec4
-> HMM_MulM4V4
HMM_MultiplyVec3f
-> HMM_MulV3F
HMM_EqualsVec4
-> HMM_EqV4
This is obviously an extremely breaking change, but to ease the transition, we provide a tool to automatically rename Handmade Math functions and types in your codebase. See the update
folder of the repo.
Matrix inverses. We are happy to finally provide our most long-requested feature. We now have a variety of functions for matrix inverses.
2x2 and 3x3 matrices. We now provide types HMM_Mat2
and HMM_Mat3
.
C11 generics. C programmers can now use "overloaded" functions like HMM_Add
instead of HMM_AddV2
, HMM_AddV3
, etc. Your expressions can now be a little more readable!
Consistent (and configurable) angle units. Handmade Math 1.0 used radians for some operations and degrees for others. Handmade Math 2.0 makes all functions use the same angle units - but also makes those units configurable, so you can choose to use radians, degrees, or turns across your codebase. See the documentation in HandmadeMath.h
.
Left-handed and right-handed operations. Handmade Math 2.0 has both left-handed and right-handed versions of all operations where handedness applies.
This release would not be possible without the help of @dev-dwarf. Many thanks for his contributions!
Other breaking changes:
#define HANDMADE_MATH_PROVIDE_MATH_FUNCTIONS
in addition to #define HMM_SINF
etc.HMM_ExpF
, HMM_LogF
, HMM_Power
, and HMM_PowerF
have been removed. They were not used internally and provided no benefit.HMM_PREFIX
has been removed. If you wish to use a different prefix, find and replace within HandmadeMath.h
.Added Unary Minus operator for HMM_Vec2
, HMM_Vec3
, and HMM_Vec4
.
HMM_
prefix on function names by defining a macro called HMM_PREFIX(name)
.Thanks to @AntonDan for his contributions.