From bcbec562ac8cfb1a2fccaf27eb818adf4d1a2abf Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 19 Jun 2024 14:38:50 +0300 Subject: [PATCH] add mat4.determinant(...) --- doc/en/scripting/builtins/libmat4.md | 7 +++++++ doc/ru/scripting/builtins/libmat4.md | 7 +++++++ src/logic/scripting/lua/libmat4.cpp | 9 +++++++++ 3 files changed, 23 insertions(+) diff --git a/doc/en/scripting/builtins/libmat4.md b/doc/en/scripting/builtins/libmat4.md index 3d0bb1d1..6216dff2 100644 --- a/doc/en/scripting/builtins/libmat4.md +++ b/doc/en/scripting/builtins/libmat4.md @@ -25,6 +25,13 @@ mat4.idt() mat4.idt(dst: matrix) ``` +## Matrix determinant - *mat4.determinant(...)* + +```lua +-- calculates the determinant of the matrix +mat4.determinant(m: matrix) +``` + ## Matrix multiplication - *mat4.mul(...)* ```lua diff --git a/doc/ru/scripting/builtins/libmat4.md b/doc/ru/scripting/builtins/libmat4.md index a451ad3f..30d02784 100644 --- a/doc/ru/scripting/builtins/libmat4.md +++ b/doc/ru/scripting/builtins/libmat4.md @@ -25,6 +25,13 @@ mat4.idt() mat4.idt(dst: matrix) ``` +## Определитель матрицы - *mat4.determinant(...)* + +```lua +-- вычисляет определитель матрицы +mat4.determinant(m: matrix) +``` + ## Умножение матриц - *mat4.mul(...)* ```lua diff --git a/src/logic/scripting/lua/libmat4.cpp b/src/logic/scripting/lua/libmat4.cpp index 97e9ae82..00dd2e96 100644 --- a/src/logic/scripting/lua/libmat4.cpp +++ b/src/logic/scripting/lua/libmat4.cpp @@ -22,6 +22,14 @@ static int l_idt(lua::State* L) { return 0; } +/// mat4.determinant(matrix: float[16]) - calculates matrix determinant +static int l_determinant(lua::State* L) { + if (lua::gettop(L) != 1) { + throw std::runtime_error("invalid arguments number (1 expected)"); + } + return lua::pushnumber(L, glm::determinant(lua::tomat4(L, 1))); +} + /// Overloads: /// mat4.mul(m1: float[16], m2: float[16]) -> float[16] - creates matrix of m1 and m2 multiplication result /// mat4.mul(m1: float[16], m2: float[16], dst: float[16]) -> float[16] - updates dst matrix with m1 and m2 multiplication result @@ -193,6 +201,7 @@ const luaL_Reg mat4lib [] = { {"translate", lua::wrap>}, {"inverse", lua::wrap}, {"transpose", lua::wrap}, + {"determinant", lua::wrap}, {"tostring", lua::wrap}, {NULL, NULL} };