Jackalope / jmath (public) (License: GPLv3 or later) (since 2018-10-11) (hash sha1)
C++ conxstexpr template Math library with:
- multidimensional vectors and matrices
- geometry primitives with projection, distance and intersection functions
- coordinate systems conversions
- some routines

Depends on GCE-math C++ library as git submodule.

Used with clang (version 9 or 10) and gcc (version 9).
Written with C++17.
List of commits:
Subject Hash Author Date (UTC)
different projection matrix built functions for different fov specifications (horizontal, vertical, both) 0aa5dbb5e22c616a559bb6f6d75b0313db7b3e84 jp.larry 2020-01-07 13:53:30
normal from 3 points and plane from normal and offset functions 432070f339b8c48b18c4e2dab4389dc19ffa241c jp.larry 2020-01-06 07:27:29
check if floating point when converting from degrees 75397be78960535bca1ec487221b6b46382e0724 jp.larry 2020-01-06 07:26:59
distance between 2 vectors and intersection line with plane 1620677672179226ea92affb5e3dc600cd3fa133 jp.larry 2020-01-05 03:22:56
2D vector rotate function 049eae7f349cf44bde666b66684a47c8bb4f1300 jp.larry 2020-01-01 05:09:07
removed nodiscard from matrix *= operator and removed redundant function rotate(axis) 0dea084c205202125acfe390a248be61c962d393 jp.larry 2020-01-01 03:09:48
rafactoring update, matrix multiplication now works in different way 2f2e01d80896cd96428a9c9394382e6f040f92fb jp.larry 2019-12-31 11:00:01
round_down function 672a293659a39e29be0d84f28801cf2718070f10 Jackalope 2019-12-28 03:02:03
migw warning solved 80dec7906c5fe2dc026d6774fd526df2ded049cc Jackalope 2019-12-21 10:22:55
refactoring 8b9c8aef3bcbbe3a3a72160eacd15b2d8397524c jp.larry 2019-12-19 08:10:49
lookat and projection functions refactoring f37008f4ad0e4501e89a6a26b4270bc5d6080578 jp.larry 2019-12-16 10:58:53
gcem correct include 03e0350e04d3e1b2c9e7d4f58ef473ce9b5cf319 Your Name 2019-11-27 04:30:39
changed directories layout abcc3ff61e8246f0519498b755bfe23877626144 Your Name 2019-11-26 22:52:02
CMakeLists.txt added 41ddc92280ce3969f8b3f16efce7e63c8c70425a Your Name 2019-11-12 10:32:19
removed excess definition 67b8131470fbbf0d87f2f51cea6326fcdab8d180 Your Name 2019-07-07 12:24:10
gcem updated ff3d073843c2f3a153de930a3651ad8e02c1b7d1 jp.larry 2019-06-19 10:59:53
new functions 46561c6e97aa1ba2d0c41a19ba1977b0427b5f4b Your Name 2019-05-07 05:42:45
new functions 61e3c490daf394f07a4b9de2640d9e1b42fc2dd1 Your Name 2019-05-05 11:28:57
pragma removed 5843f3d68f0d3c08d5be7d16ef8c05db5bceda89 jp.larry 2019-05-01 12:31:57
uint replaced with unsigned int bbde30ca5f66601143ed8862aded9da0cd3aadf8 Your Name 2019-04-30 23:30:19
Commit 0aa5dbb5e22c616a559bb6f6d75b0313db7b3e84 - different projection matrix built functions for different fov specifications (horizontal, vertical, both)
Author: jp.larry
Author date (UTC): 2020-01-07 13:53
Committer name: jp.larry
Committer date (UTC): 2020-01-07 13:53
Parent(s): 432070f339b8c48b18c4e2dab4389dc19ffa241c
Signing key:
Tree: 0bb09743e7d2ff43bba5342b65ac915ce8e4e7e6
File Lines added Lines deleted
include/math/matrix/matrix_functions.hpp 22 6
File include/math/matrix/matrix_functions.hpp changed (mode: 100644) (index 2ea07de..51f69c3)
... ... namespace math
52 52 return rotation(axis.x, axis.y, axis.z); return rotation(axis.x, axis.y, axis.z);
53 53 } }
54 54 T_IMPL MATRIX(4) T_IMPL MATRIX(4)
55 projection(T fov_y, T aspect_x_to_y, T z_near, T z_far)
56 {
57 const T y_scale = 1 / std::tan(fov_y / 2);
58 const T x_scale = y_scale / aspect_x_to_y;
55 projection(const vector<2, T> scale, T z_near, T z_far) {
59 56 const T z_scale = z_far / (z_far - z_near); const T z_scale = z_far / (z_far - z_near);
60 57 const T z_shift = - z_scale * z_near; const T z_shift = - z_scale * z_near;
61 return {{{ x_scale, 0, 0, 0 },
62 { 0, y_scale, 0, 0 },
58 return {{{ scale.x, 0, 0, 0 },
59 { 0, scale.y, 0, 0 },
63 60 { 0, 0, z_scale, 1 }, { 0, 0, z_scale, 1 },
64 61 { 0, 0, z_shift, 0 }}}; { 0, 0, z_shift, 0 }}};
65 62 } }
63 T_IMPL MATRIX(4)
64 projection_fov_y(T fov_y, T aspect_x_to_y, T z_near, T z_far) {
65 const T y_scale = 1 / std::tan(fov_y / 2);
66 const T x_scale = y_scale / aspect_x_to_y;
67 return projection({x_scale, y_scale}, z_near, z_far);
68 }
69 T_IMPL MATRIX(4)
70 projection_fov_x(T fov_x, T aspect_x_to_y, T z_near, T z_far) {
71 const T x_scale = 1 / std::tan(fov_x / 2);
72 const T y_scale = x_scale * aspect_x_to_y;
73 return projection({x_scale, y_scale}, z_near, z_far);
74 }
75 T_IMPL MATRIX(4)
76 projection_fov_xy(T fov_x, T fov_y, T z_near, T z_far) {
77 const T x_scale = 1 / std::tan(fov_x / 2);
78 const T y_scale = 1 / std::tan(fov_y / 2);
79 return projection({x_scale, y_scale}, z_near, z_far);
80 }
81
66 82 T_IMPL MATRIX(3) T_IMPL MATRIX(3)
67 83 rotation(const VECTOR(3)& unit, T radians) rotation(const VECTOR(3)& unit, T radians)
68 84 { {
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/Jackalope/jmath

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/Jackalope/jmath

Clone this repository using git:
git clone git://git.rocketgit.com/user/Jackalope/jmath

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main