mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-13 06:51:51 +00:00
Merge pull request #809 from RomanDonw/main
added quat.from_euler function and updated docs
This commit is contained in:
commit
76bda98cce
3 changed files with 26 additions and 4 deletions
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue