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)
clusters depth slices and depth convertions a0d15a75baa2bdeef9c033c19ded7424ab29da1a jp.larry 2020-01-10 12:06:17
plane struct inherited from vector of size 4 with normal and offset 74331763aa73548b17ff91aab0d6abaa6fa0e7d8 jp.larry 2020-01-10 10:29:04
changed identation c815eb8588c6229bbf56606446e76b0a75553eee jp.larry 2020-01-10 10:28:20
sqrt function 856c393e7ba60f99bd18e524ef408f427e04fa1c jp.larry 2020-01-10 10:27:55
removed unused matrix files 1bc1e845a6a391cce90be9023fae41937dbd100d jp.larry 2020-01-07 13:55:53
frustum data type 48480173a43561e7502458579378b78591716d1c jp.larry 2020-01-07 13:53:57
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
Commit a0d15a75baa2bdeef9c033c19ded7424ab29da1a - clusters depth slices and depth convertions
Author: jp.larry
Author date (UTC): 2020-01-10 12:06
Committer name: jp.larry
Committer date (UTC): 2020-01-10 12:06
Parent(s): 74331763aa73548b17ff91aab0d6abaa6fa0e7d8
Signing key:
Tree: 5b2bd4a26d1ed0d06e9209c758e4e1bc9ea1ff8f
File Lines added Lines deleted
include/math/frustum.h 18 12
File include/math/frustum.h changed (mode: 100644) (index 7abf2f1..b522ef2)
... ... namespace math
55 55 [[nodiscard]] constexpr T bound_y(T depth) const { [[nodiscard]] constexpr T bound_y(T depth) const {
56 56 return depth * gcem::tan(fov_y()); return depth * gcem::tan(fov_y());
57 57 } }
58 };
59
60 template<typename T = float>
61 struct clusters_depth
62 {
63 T scale;
64 T bias;
65
66 template<Fov F>
67 void update(const frustum<F,T> &f, const T &nSlices) {
68 T lfn = gcem::log(f.zFar / f.zNear);
69 scale = nSlices / lfn;
70 bias = gcem::log(f.zNear);
71 }
58 72
59 [[nodiscard]] constexpr int32_t
60 cluster_slice(T nSlices, T depth) const {
61 T lfn = gcem::log(zFar / zNear);
62 T scale = nSlices / lfn;
63 T bias = -(nSlices * gcem::log(zNear) / lfn);
64 return int32_t(gcem::log(depth) * scale + bias);
73 [[nodiscard]] constexpr int32_t slice(const T &depth) const {
74 return int32_t((gcem::log(depth) - bias) * scale);
65 75 } }
66 [[nodiscard]] constexpr T
67 cluster_depth(T nSlices, uint cluster_slice) const {
68 T lfn = gcem::log(zFar / zNear);
69 T scale = nSlices / lfn;
70 T bias = -(nSlices * gcem::log(zNear) / lfn);
71 return gcem::exp((cluster_slice - bias) / scale);
76 [[nodiscard]] constexpr T depth(uint slice) const {
77 return gcem::exp(slice / scale + bias);
72 78 } }
73 79 }; };
74 80 } }
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