Renamed to LEEF-Math

This commit is contained in:
FatalErr42O 2024-12-01 12:04:30 -08:00
parent 7a55cf9303
commit 190eee0d9c
24 changed files with 93 additions and 83 deletions

View File

@ -1,7 +1,7 @@
Cirno's Perfect Math Library
====
This is a Love (the game framework) library which has been ported and modified to work in the context of Luanti.
This is a Love (the game framework) library CPML which has been ported and modified to work in the context of Luanti.
### Main features
* only Luanti Library which implements the ability to manipulate matrices and quaternions and convert them reliably to irrlicht bone rotations.
@ -14,12 +14,12 @@ This is a Love (the game framework) library which has been ported and modified t
* more
### Adapted for Luanti
For best memory performance: have luaJIT & it's FFI library (this should be built into luaJIT), and add MTUL-CPML to your trusted list (so it can `require()` call the FFI library).
For best memory performance: have luaJIT & it's FFI library (this should be built into luaJIT), and add LEEF-Math to your trusted list (so it can `require()` call the FFI library).
Various useful bits of game math. 3D line intersections, ray casting, 2d/3d vectors, 4x4 matrices, quaternions, etc.
This is a fork of CPML (for LÖVE/love3d), it's been ported over the minetest so it can be used in whatever you need it for.
Documentation can be found here: <https://minetest-unified-library.github.io/MTUL-CPML/>.
Documentation can be found here: <https://minetest-unified-library.github.io/LEEF-Math/>.
For possible future contributors: documentation must be generated manually when a commit is made, because I haven't set up workflows (and have no idea how to).

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
@ -57,7 +57,7 @@
<div id="content">
<h2>A math library with (hopefully) everything you need for 2D/3D games</h2>
<h2>The CPML library ported to Luanti and extended.</h2>
<h2>Modules</h2>
<table class="module_list">
@ -130,7 +130,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -662,7 +662,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -662,7 +662,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -77,7 +77,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -730,7 +730,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -118,7 +118,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -77,7 +77,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -1505,7 +1505,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -77,7 +77,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -703,7 +703,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -1403,7 +1403,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -77,7 +77,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -550,7 +550,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -1117,7 +1117,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -1025,7 +1025,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -24,7 +24,7 @@
<div id="navigation">
<br/>
<h1>CPML</h1>
<h1>LEEF Math</h1>
<ul>
@ -61,26 +61,38 @@
<h1>Cirno's Perfect Math Library</h1>
<h3>Adapted for Minetest</h3>
<p>For best memory performance: have luaJIT &amp; it's FFI library (this should be built into luaJIT), and add MTUL-CPML to your trusted list (so it can <code>require()</code> call the FFI library).</p>
<p>This is a Love (the game framework) library CPML which has been ported and modified to work in the context of Luanti.</p>
<h3>Main features</h3>
<p>* only Luanti Library which implements the ability to manipulate matrices and quaternions and convert them reliably to irrlicht bone rotations.
* bounding box modules
* mat4
* vec3
* quaternions
* octrees
* bvh lib
* more</p>
<h3>Adapted for Luanti</h3>
<p>For best memory performance: have luaJIT &amp; it's FFI library (this should be built into luaJIT), and add LEEF-Math to your trusted list (so it can <code>require()</code> call the FFI library).</p>
<p>Various useful bits of game math. 3D line intersections, ray casting, 2d/3d vectors, 4x4 matrices, quaternions, etc.</p>
<p>This is a fork of CPML (for LÖVE/love3d), it's been ported over the minetest so it can be used in whatever you need it for.
Documentation can be found here: <a href="https://minetest-unification-library.github.io/MTUL-CPML/">https://minetest-unification-library.github.io/MTUL-CPML/</a>.</p>
Documentation can be found here: <a href="https://minetest-unified-library.github.io/LEEF-Math/">https://minetest-unified-library.github.io/LEEF-Math/</a>.</p>
<p>Documentation must be generated manually when a commit is made, because I haven't set up workflows (and have no idea how to).</p>
<p>For possible future contributors: documentation must be generated manually when a commit is made, because I haven't set up workflows (and have no idea how to).</p>
<h3>TODO:</h3>
<p>* Vec3s and Vec2s are not currently adapted for functionality with MT vectors (seperate classes)
* Figure out how CPML (originally) automatically updated docs, and do it here.</p>
<p>* Vec3s and Vec2s are not currently adapted for functionality with MT vectors, fix.</p>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/lunarmodules/ldoc">LDoc 1.5.0</a></i>
<i style="float:right;">Last updated 2024-11-30 20:09:10 </i>
<i style="float:right;">Last updated 2024-12-01 12:04:18 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -35,7 +35,6 @@
local cpml = {
_LICENSE = "CPML is distributed under the terms of the MIT license. See LICENSE.md.",
_URL = "https://github.com/excessive/cpml",
_VERSION = "1.2.9",
_DESCRIPTION = "Cirno's Perfect Math Library: Just about everything you need for 3D games. Hopefully."
}
@ -59,18 +58,18 @@ local files = {
--you will now witness the lua equivelant of a schizo rant. Have fun with this bullshit.
--initialize some variables
mtul = mtul or {
leef = leef or {
loaded_modules = {}
}
mtul.math = mtul.math or {}
mtul.loaded_modules.cpml = true
leef.math = leef.math or {}
leef.loaded_modules.math = true
local old_require = require --just in case require is present (aka it's an insecure environment)
local old_package_path
local modpath
--check that it's minetest and not a lua script running it. If it's not minetest we dont have to do all of this, but otherwise we dont know if
if minetest or (core and core.register_globalstep) then
modpath = minetest.get_modpath("mtul_cpml")
modpath = minetest.get_modpath("leef_math")
local ie = minetest.request_insecure_environment()
--since we can't use require, what we do instead is override require by some utterly offensive means.
@ -94,22 +93,22 @@ if minetest or (core and core.register_globalstep) then
if type(jit) == "table" and jit.status() then
if ie then
if pcall(require, "ffi") then
minetest.log("verbose", "MTUL-CPML: loaded JIT FFI library. Memory efficiency with FFI enabled.")
print("mtul-cpml: JIT FFI loaded successfully.")
minetest.log("verbose", "LEEF-Math: loaded JIT FFI library. Memory efficiency with FFI enabled.")
print("LEEF-Math: JIT FFI loaded successfully.")
else
minetest.log("error", "MTUL-CPML: Failure to load JIT FFI library.")
minetest.log("error", "LEEF-Math: Failure to load JIT FFI library.")
end
else
minetest.log("error", "MTUL-CPML: insecure environment denied for MTUL-CPML. Add mtul-cpml to your trusted mods for better performance")
minetest.log("error", "LEEF-Math: insecure environment denied for LEEF-Math. Add leef_math to your trusted mods for better performance")
end
else
minetest.log("verbose", "MTUL-CPML: JIT not present, skipped attempt to load JIT FFI library for acceleration and memory efficiency")
minetest.log("verbose", "LEEF-Math: JIT not present, skipped attempt to load JIT FFI library for acceleration and memory efficiency")
end
end
--load the files
for _, file in ipairs(files) do
mtul.math[file] = require(modules .. file)
leef.math[file] = require(modules .. file)
end
--unset all the global shit we had to change for CPML to work properly.
@ -123,12 +122,12 @@ end
--dofile(modpath.."/unit_tests/quat_unit_test.lua")
if modpath then
print("MTUL CPML: BEGINNING UNIT TESTING FOR COMPLEX TYPES")
print("LEEF Math: BEGINNING UNIT TESTING FOR COMPLEX TYPES")
dofile(modpath.."/unit_tests/irrlicht_luanti_tests.lua")
dofile(modpath.."/unit_tests/matrix_unit_test.lua")
dofile(modpath.."/unit_tests/quat_unit_test.lua")
else
print("MTUL CPML: BEGINNING UNIT TESTING FOR COMPLEX TYPES")
print("LEEF Math: BEGINNING UNIT TESTING FOR COMPLEX TYPES")
require("/unit_tests/irrlicht_luanti_tests.lua")
require("/unit_tests/matrix_unit_test.lua")
require("/unit_tests/quat_unit_test.lua")

View File

@ -1,6 +1,6 @@
project="CPML"
project="LEEF Math"
title="CPML documentation"
description="A math library with (hopefully) everything you need for 2D/3D games"
description="The CPML library ported to Luanti and extended."
format="markdown"
backtick_references=false
file = {

View File

@ -1,5 +1,4 @@
name = mtul_cpml
title = MTUL Cirnos Perfect Math Library
name = leef_math
title = LEEF - Cirnos Perfect Math Library
description = integrates CPML library from the Love framework community into Minetest
author = CPML creators, FatalError42O
optional_depends = mtul_core
author = CPML creators, FatalError42O

View File

@ -949,7 +949,7 @@ end
local quat_new
function mat4.to_quaternion(m)
--I want to note that for no apparent reason at all the original matrix was transposed here
if not quat_new then quat_new = mtul.math.quat.new end
if not quat_new then quat_new = leef.math.quat.new end
local w = math.sqrt(1 + m[1] + m[6] + m[11]) / 2
local q=quat_new(
(m[7] - m[10]) /(4 * w),

View File

@ -1,7 +1,7 @@
local cos = math.cos
local sin = math.sin
local m = mtul.math
local mat4 = mtul.math.mat4
local m = leef.math
local mat4 = leef.math.mat4
local pitch_ZY = function(a)
local temp = mat4.new()
@ -97,7 +97,7 @@ local function make_funcs_human_readable(str)
return str
end
function mtul.math.find_matrix_rotation_order(check_func)
function leef.math.find_matrix_rotation_order(check_func)
--x,y,z
local euler = {(math.random()-.5)*math.pi*4, (math.random()-.5)*math.pi*4, (math.random()-.5)*math.pi*4}
local output = check_func(mat4.new(), euler[1],euler[2],euler[3])
@ -131,17 +131,17 @@ function mtul.math.find_matrix_rotation_order(check_func)
end
print("================== BEGINNING LUANTI AND IRRLICHT UNIT TESTs =======================")
local find_rot_order = mtul.math.find_matrix_rotation_order
local find_rot_order = leef.math.find_matrix_rotation_order
print("\n checking sanity of tests:")
local _tempeuler = {(math.random()-.5)*math.pi*4, (math.random()-.5)*math.pi*4, (math.random()-.5)*math.pi*4}
local _testmatrix = mtul.math.mat4.set_rot_zxy(mat4.new(), _tempeuler[1],_tempeuler[2],_tempeuler[3])
local _testmatrix = leef.math.mat4.set_rot_zxy(mat4.new(), _tempeuler[1],_tempeuler[2],_tempeuler[3])
print("matrix equality check func is sane:", check_matrix_equality(_testmatrix,_testmatrix))
print("matrix equality check func tolerance:", matrix_tolerance)
print("\n Checking rotation orders. Rotation application order is in reverse, these are the literal matrix multiplication order. ")
print("checking rotation matrix `set_rot_luanti_entity`")
find_rot_order(mtul.math.mat4.set_rot_luanti_entity)
find_rot_order(leef.math.mat4.set_rot_luanti_entity)
print("checking `set_rot_irrlicht_bone`")
find_rot_order(mtul.math.mat4.set_rot_irrlicht_bone)
find_rot_order(leef.math.mat4.set_rot_irrlicht_bone)
print("================== ENDING LUANTI AND IRRLICHT UNIT TESTs =======================")

View File

@ -1,4 +1,4 @@
local mat4 = mtul.math.mat4
local mat4 = leef.math.mat4
local matrix_tolerance = .00001
local function check_matrix_equality(m1,m2)
for i = 1,16 do
@ -35,10 +35,10 @@ end
find_irr_order()
end]]
print("================== BEGINNING MATRIX UNIT TESTs =======================")
local find_rot_order = mtul.math.find_matrix_rotation_order
local find_rot_order = leef.math.find_matrix_rotation_order
print("\n checking sanity of tests:")
local _tempeuler = {(math.random()-.5)*math.pi*4, (math.random()-.5)*math.pi*4, (math.random()-.5)*math.pi*4}
local _testmatrix = mtul.math.mat4.set_rot_zxy(mat4.new(), _tempeuler[1],_tempeuler[2],_tempeuler[3])
local _testmatrix = leef.math.mat4.set_rot_zxy(mat4.new(), _tempeuler[1],_tempeuler[2],_tempeuler[3])
print("matrix equality check func is sane:", check_matrix_equality(_testmatrix,_testmatrix))
print("matrix equality check func tolerance:", matrix_tolerance)
local ran_ang = math.random()*math.pi*2
@ -46,11 +46,11 @@ print("santitize_angle is sane:", equals(1.60947655802, santitize_angle(7.892661
--print("checking irrlicht setRotationRadians")
--print(find_rot_order(irrlicht_matrix_setRotationRadians).." iterations")
print("\n checking MTUL's luanti and irrlicht matrix rotation orders. Rotation application order is in reverse, these are the literal matrix multiplication order. ")
print("\n checking LEEF's luanti and irrlicht matrix rotation orders. Rotation application order is in reverse, these are the literal matrix multiplication order. ")
print("checking rotation matrix `set_rot_luanti_entity`")
find_rot_order(mtul.math.mat4.set_rot_luanti_entity)
find_rot_order(leef.math.mat4.set_rot_luanti_entity)
print("checking `set_rot_irrlicht_bone`")
find_rot_order(mtul.math.mat4.set_rot_irrlicht_bone)
find_rot_order(leef.math.mat4.set_rot_irrlicht_bone)
--[[print("check in euler out euler for minetest entitiy matrix rotations")
local x,y,z =(math.random()-.5)*math.pi*4,(math.random()-.5)*math.pi*4,(math.random()-.5)*math.pi*4
@ -103,13 +103,13 @@ print()]]
--[[local quat = mtul.math.quat
--[[local quat = leef.math.quat
print("\n comparing `euler to matrix` & `euler to quaternion` matrix outputs")
x,y,z = math.random()*math.pi*2, math.random()*math.pi*2, math.random()*math.pi*2
local mat1 = mat4.set_rot_zxy(mat4.new(), x,y,z)
local new_quat = quat.new():from_euler_zxy(x,y,z)
local mat2 = mat4.set_rot_from_quaternion(mat4.new(), new_quat)
--local new_quat = mtul.quat.from_euler_
--local new_quat = leef.quat.from_euler_
print(mat1)
print(mat2)
print(check_matrix_equality(mat1,mat2))]]

View File

@ -1,8 +1,8 @@
local mat4 = mtul.math.mat4
local quat = mtul.math.quat
local vec3 = mtul.math.vec3
local mat4 = leef.math.mat4
local quat = leef.math.quat
local vec3 = leef.math.vec3
local function check_matrix_equality(m1,m2)
for i = 1,16 do
if math.abs(m1[i]-m2[i]) > 0.001 then
@ -15,7 +15,7 @@ end
print("================== BEGINNING QUATERNION UNIT TESTs =======================")
--print("\n comparing mul_vec3 and rotate_vec3 with random quat on forward facing unit dir")
--[[local new_quat = mtul.math.quat.from_angle_axis((math.random()-.5)*math.pi*4, mtul.math.vec3.new(math.random(), math.random(), math.random())):normalize()
--[[local new_quat = leef.math.quat.from_angle_axis((math.random()-.5)*math.pi*4, leef.math.vec3.new(math.random(), math.random(), math.random())):normalize()
local forward = vec3.new(0,0,1)
print(new_quat:mul_vec3(forward))
print(new_quat:rotate_vec3(forward))
@ -26,8 +26,8 @@ print(new_quat:rotate_vec3(forward))]]
local new_quat = mtul.math.quat.from_angle_axis((math.random()-.5)*math.pi*4, mtul.math.vec3.new(math.random(), math.random(), math.random())):normalize()
local to_mat_from_quat = mtul.math.mat4.from_quaternion(new_quat)
local new_quat = leef.math.quat.from_angle_axis((math.random()-.5)*math.pi*4, leef.math.vec3.new(math.random(), math.random(), math.random())):normalize()
local to_mat_from_quat = leef.math.mat4.from_quaternion(new_quat)
local to_mat_from_axis_from_quat = mat4.from_angle_axis(new_quat:to_angle_axis())
--should tell us that quat to matrix is working fine... trusting the original creators anyway...
print("\n comparing `quat->matrix` to old `quat->angle_axis->matrix`. Matches:",