Merge pull request #809 from RomanDonw/main

added quat.from_euler function and updated docs
This commit is contained in:
MihailRis 2026-03-04 14:08:46 +03:00 • committed by GitHub
commit 76bda98cce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 4 deletions

View file

@ -2,22 +2,34 @@
Библиотека для работы с кватернионами. Библиотека для работы с кватернионами.
## Кватернион из матрицы - *mat4.from_quat(...)* ## Кватернион из матрицы - *quat.from_mat4(...)*
```lua ```lua
-- создает кватернион на основе матрицы вращения -- создаёт кватернион на основе матрицы вращения
quat.from_mat4(m: matrix) -> quat quat.from_mat4(m: matrix) -> quat
-- записывает кватернион по матрице вращения в dst -- записывает кватернион по матрице вращения в dst
quat.from_mat4(m: matrix, dst: quat) quat.from_mat4(m: matrix, dst: quat)
``` ```
## Кватернион из углов Эйлера - *quat.from_euler(...)*
```lua
-- создаёт кватернион на основе вектора, содержащего углы Эйлера в порядке XYZ (pitch, yaw, roll)
-- (значения углов строго в градусах)
quat.from_euler(euler: vec3) -> quat
-- записывает кватернион в dst на основе вектора, содержащего углы Эйлера в порядке XYZ (pitch, yaw, roll)
-- (значения углов строго в градусах)
quat.from_euler(euler: vec3, dst: quat)
```
## Сферическая линейная интерполяция - *quat.slerp(...)* ## Сферическая линейная интерполяция - *quat.slerp(...)*
Интерполяция всегда выполняется по короткому пути, а вращение выполняется с постоянной скоростью. Интерполяция всегда выполняется по короткому пути, а вращение выполняется с постоянной скоростью.
```lua ```lua
-- создает кватернион как интерполяцию между a и b, -- создаёт кватернион как интерполяцию между a и b,
-- где t - фактор интерполяции -- где t - фактор интерполяции
quat.slerp(a: quat, b: quat, t: number) -> quat quat.slerp(a: quat, b: quat, t: number) -> quat
@ -29,6 +41,6 @@ quat.slerp(a: quat, b: quat, t: number, dst: quat)
## Перевод в строку - *quat.tostring(...)* ## Перевод в строку - *quat.tostring(...)*
```lua ```lua
-- возвращает строку представляющую содержимое кватерниона -- возвращает строку, представляющую содержимое кватерниона
quat.tostring(q: quat) -> string quat.tostring(q: quat) -> string
``` ```

View file

@ -3,6 +3,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <memory> #include <memory>
#include <cstdint>
class Engine; class Engine;
class World; class World;

View file

@ -44,8 +44,17 @@ static int l_tostring(lua::State* L) {
return lua::pushstring(L, ss.str()); return lua::pushstring(L, ss.str());
} }
static int l_from_euler(lua::State *L) {
uint argc = lua::check_argc(L, 1, 2);
glm::vec3 euler = glm::radians(lua::tovec3(L, 1));
if (argc == 2) return lua::setquat(L, 2, glm::quat(euler));
return lua::pushquat(L, glm::quat(euler));
}
const luaL_Reg quatlib[] = { const luaL_Reg quatlib[] = {
{"from_mat4", lua::wrap<l_from_mat4>}, {"from_mat4", lua::wrap<l_from_mat4>},
{"from_euler", lua::wrap<l_from_euler>},
{"slerp", lua::wrap<l_slerp>}, {"slerp", lua::wrap<l_slerp>},
{"tostring", lua::wrap<l_tostring>}, {"tostring", lua::wrap<l_tostring>},
{nullptr, nullptr} {nullptr, nullptr}