aboutsummaryrefslogtreecommitdiff
path: root/docs/reference
diff options
context:
space:
mode:
Diffstat (limited to 'docs/reference')
-rw-r--r--docs/reference/environment-effects.md18
1 files changed, 18 insertions, 0 deletions
diff --git a/docs/reference/environment-effects.md b/docs/reference/environment-effects.md
index 3267a2f..42e203c 100644
--- a/docs/reference/environment-effects.md
+++ b/docs/reference/environment-effects.md
@@ -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 команды,