fix(fx): orient Type 1 quads along their authored axis
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s

This commit is contained in:
Valentin Popov committed 2026-10-30 18:15:19 +04:00
1 parent 437e8d6307
commit bce6e3b263
2 files changed
+89 -11

No files matched your search

+18
View File
@@ -294,6 +294,24 @@ D110-порядок. Все три evaluator-а принимают уже соб
`context + 0x60 < 8`, а API этих evaluator-ов не выбирает другой context.
Evaluator типа 2 принимает индекс context явно и учитывает этот gate в `active`.
У Op3 mode 1 ось задаёт длину прямоугольника, а не его нормаль. Для
локального вектора к камере `v` и анимируемой оси `a` столбцы базиса имеют
порядок `[a, u, w]`, где `u = normalize(v × a)`, `w = a × u`. Плоскость
прямоугольника — XY, поэтому первая сторона идёт вдоль авторской оси, а
вторая поворачивается к камере. Это сохраняет соединение между точками
локатора при движении камеры. Если поставить ось в третий столбец,
прямоугольник займёт поперечную плоскость и связь превратится в полоску или
небольшой диск.
Порядок подтверждён аргументами конструктора матрицы в GOG `Effect.dll`
(сборка из [таблицы бинарников](original-binaries.md), SHA-256
`386a3e8db1ce23f61957825d633c7dae1ed40c25cab0cf10a534385fd7cee789`):
RVA `0x93D0`, ветка mode 1 с `0x9739`, сборка столбцов `0x97F6–0x983C`.
Например, `a = (1, 0, 0)` и `v = (2, 1, 0)` дают столбцы
`(1, 0, 0)`, `(0, 0, -1)`, `(0, 1, 0)`. При нативном вызове длины последних
двух столбцов могут немного отличаться от единицы из-за приближённой
нормализации выбранного `g_FastProc`; порядок осей от этого не меняется.
## Частицы Op7
`fparkan-fx::op7` вычисляет фиксированный набор частиц Op7 по body команды,