feat: 50 игр на Lua + импорт Roblox для всех + поддержка Lua в плеере #39
Binary file not shown.
@ -561,19 +561,30 @@ def _cframe_orientation_to_matrix(orientation_id: int) -> tuple:
|
|||||||
|
|
||||||
Источник: https://dom.rojo.space/binary#cframe-orientation-ids
|
Источник: https://dom.rojo.space/binary#cframe-orientation-ids
|
||||||
|
|
||||||
Это полная таблица 24-х валидных orientation id для cube symmetries.
|
Формула из rbx-dom:
|
||||||
Возвращает (r00, r01, r02, r10, r11, r12, r20, r21, r22).
|
orientation_id = (rx_axis * 6) + ry_axis + 1
|
||||||
|
где rx_axis, ry_axis ∈ {0..5} = (R0, R1, R2, R3, R4, R5):
|
||||||
|
R0 = +X, R1 = +Y, R2 = +Z, R3 = -X, R4 = -Y, R5 = -Z
|
||||||
|
|
||||||
|
rx — это направление куда смотрит локальная +X ось куба (правая грань),
|
||||||
|
ry — направление куда смотрит локальная +Y ось (верхняя грань).
|
||||||
|
|
||||||
|
Возвращает (r00, r01, r02, r10, r11, r12, r20, r21, r22) row-major.
|
||||||
|
Матрица собирается так: rx, ry, rz это столбцы.
|
||||||
"""
|
"""
|
||||||
# Таблица из rbx-dom. Каждое значение — пара (rx_axis, ry_axis) где
|
# Правильный порядок axes (rbx-dom):
|
||||||
# значения в {0,1,2,3,4,5} = +X, -X, +Y, -Y, +Z, -Z
|
# 0=+X, 1=+Y, 2=+Z, 3=-X, 4=-Y, 5=-Z
|
||||||
AXES = [
|
AXES = [
|
||||||
(1, 0, 0), (-1, 0, 0),
|
(1, 0, 0), # +X
|
||||||
(0, 1, 0), (0, -1, 0),
|
(0, 1, 0), # +Y
|
||||||
(0, 0, 1), (0, 0, -1),
|
(0, 0, 1), # +Z
|
||||||
|
(-1, 0, 0), # -X
|
||||||
|
(0, -1, 0), # -Y
|
||||||
|
(0, 0, -1), # -Z
|
||||||
]
|
]
|
||||||
# orientation_id = 1..24 (1-based)
|
# orientation_id = 1..36 (некоторые комбинации rx==ry невалидны, в файлах
|
||||||
if not (1 <= orientation_id <= 24):
|
# не встречаются — но id может доходить до 6*6 = 36, не 24).
|
||||||
# Неверный id — возвращаем identity
|
if not (1 <= orientation_id <= 36):
|
||||||
return (1, 0, 0, 0, 1, 0, 0, 0, 1)
|
return (1, 0, 0, 0, 1, 0, 0, 0, 1)
|
||||||
|
|
||||||
idx = orientation_id - 1
|
idx = orientation_id - 1
|
||||||
@ -581,16 +592,14 @@ def _cframe_orientation_to_matrix(orientation_id: int) -> tuple:
|
|||||||
ry_idx = idx % 6
|
ry_idx = idx % 6
|
||||||
rx = AXES[rx_idx]
|
rx = AXES[rx_idx]
|
||||||
ry = AXES[ry_idx]
|
ry = AXES[ry_idx]
|
||||||
# rz = rx × ry (cross product)
|
# rz = rx × ry (cross product) — третий столбец
|
||||||
rz = (
|
rz = (
|
||||||
rx[1] * ry[2] - rx[2] * ry[1],
|
rx[1] * ry[2] - rx[2] * ry[1],
|
||||||
rx[2] * ry[0] - rx[0] * ry[2],
|
rx[2] * ry[0] - rx[0] * ry[2],
|
||||||
rx[0] * ry[1] - rx[1] * ry[0],
|
rx[0] * ry[1] - rx[1] * ry[0],
|
||||||
)
|
)
|
||||||
# Матрица: первые 3 — first row (R_xx, R_yx, R_zx)
|
# rx, ry, rz — это СТОЛБЦЫ матрицы.
|
||||||
# Сложновато; берём из rbx-dom convention: первые три — основа R*XAxis,
|
# row-major: [r00=rx[0], r01=ry[0], r02=rz[0], r10=rx[1], r11=ry[1], r12=rz[1], ...]
|
||||||
# затем R*YAxis, затем R*ZAxis. Расширяем в row-major form.
|
|
||||||
# На практике: orientation вектора (rx, ry, rz) — это **столбцы** матрицы.
|
|
||||||
r00, r10, r20 = rx
|
r00, r10, r20 = rx
|
||||||
r01, r11, r21 = ry
|
r01, r11, r21 = ry
|
||||||
r02, r12, r22 = rz
|
r02, r12, r22 = rz
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user