feat(app): constrain free-flight movement by building meshes
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s
This commit is contained in:
6 files changed
+1202
-43
No files matched your search
+24
-9
@@ -236,15 +236,30 @@ distance² = dot(hit_world - original_start, hit_world - original_start)
|
||||
`af87d1b2e728a0be73c52be3b44cc196ab46da7799f25a15d40f8c9b0b425ead` (RVA
|
||||
`0x35430`, `0x35961`) и `AniMesh.dll` SHA-256
|
||||
`65659bf67f20e5be77d67a5b2f59968f61b94293143807fa59ca451c560c4f7e` (RVA
|
||||
`0x134D0`, `0x10A50`). Игнорируемый тест загружает настоящий объект PLANT 4
|
||||
миссии AutoDemo и проверяет, что сегмент пересекает геометрию Node3 в исходной
|
||||
закрытой позе, но проходит без попадания при явно заданной открытой позе frame
|
||||
`1`. Это проверка запроса для двух поз, а не открытие двери игровой командой.
|
||||
В загруженных Control-привязках корня PLANT нет tag-21 записи для перехода
|
||||
Node3; тест задаёт frame `1` напрямую и не исполняет команду открытия из
|
||||
миссии.
|
||||
Нативный выбор первого корня и полный мировой обход ещё не сопоставлены с Rust;
|
||||
app пока не передаёт этой функции живые runtime-позы и bindings.
|
||||
`0x134D0`, `0x10A50`).
|
||||
|
||||
Игнорируемый тест загружает настоящий объект PLANT 4 миссии
|
||||
AutoDemo и использует его исходную CTLD-привязку Node3: `frame_a = 0`,
|
||||
`frame_b = 1`, начальное смешивание `0`. В контроллере корневого PLANT нет
|
||||
записей tag-21. В
|
||||
закрытой начальной позе запрос, вызванный через обновление камеры приложения,
|
||||
останавливает движение. Затем тест вручную задаёт время `1` только для
|
||||
Node3, пересчитывает pose и преобразование присоединения и повторяет тот же
|
||||
путь обновления камеры; отрезок проходит через проём. Это проверяет подачу
|
||||
двух заданных в MSH поз в коллизию приложения, а не открытие двери событием
|
||||
миссии и не её видимое обновление в игровой сцене.
|
||||
|
||||
Интерактивный preview создаёт отдельную запись для каждого отрисовываемого
|
||||
корневого строения класса `FORT` и его отрисовываемых компонентов. На каждом
|
||||
движении камера получает текущую Node38-иерархию компонента и его актуальное
|
||||
преобразование присоединения, переводит выбранные узлы и slot-ы в мировой
|
||||
запрос и выполняет его после ограничения цели рельефом. Попадание сохраняет
|
||||
прежнюю позицию камеры, но не отменяет новый поворот; повтор ожидающего кадра
|
||||
не применяет шаг движения второй раз. Так приложение связывает мировой
|
||||
MSH-запрос с движением свободной preview-камеры. Выбор первого корня и полный
|
||||
состав мирового списка ещё не сверены с оригиналом; игровые источники поз и
|
||||
событий, а также поведение стратегической и следящей камеры остаются
|
||||
открытыми.
|
||||
|
||||
## Сторона грани в цветовом проходе
|
||||
|
||||
|
||||
@@ -209,9 +209,29 @@ position[axis] = position[axis].clamp(min[axis], max[axis]); // axis = 0, 1
|
||||
position[2] = position[2].max(ground_height + ground_clearance);
|
||||
```
|
||||
|
||||
Для каждого отрисовываемого корневого объекта класса `FORT` и каждого его
|
||||
отрисовываемого компонента интерактивный путь создаёт отдельную запись проверки.
|
||||
Она использует те же текущие позы узлов и преобразования присоединённых
|
||||
компонентов, что и геометрия кадра. После ограничения целевой позиции по
|
||||
TerrainWorld камера проверяет непрерывный отрезок от прежней позиции до цели.
|
||||
Если после нативных MSH-фильтров остаётся пересечение, позиция возвращается к
|
||||
началу шага, а рассчитанный из ввода новый поворот сохраняется. Маски batch и
|
||||
type-7, а также продолжение отрезка по helper-link описаны в
|
||||
[разделе MSH о сегментном запросе](msh.md#type-7-и-сегментный-запрос).
|
||||
|
||||
Повторная отправка того же ожидающего кадра, например после изменения размера
|
||||
области отображения, использует уже подготовленное состояние и не применяет
|
||||
движение второй раз. `--legacy-camera-capture` сохраняет положение захваченной
|
||||
камеры без изменений и не запускает проверку зданий. Это диагностическое
|
||||
ограничение, а не восстановленное правило игровой или следящей камеры
|
||||
оригинала. В проверке начальная поза берётся из декодированных связей CTLD;
|
||||
проход двери отдельно проверяется после явной выборки записанного в MSH кадра 1
|
||||
только для Node3. Так проверяется вход запроса столкновения и путь камеры;
|
||||
видимая дверь не анимируется, а миссионные команды не воспроизводятся.
|
||||
|
||||
Высота полёта сверху не ограничена. Это ограничение диагностической камеры
|
||||
превью; столкновения со стенами зданий и точные правила игровых камер оригинала
|
||||
остаются отдельными задачами.
|
||||
превью; точные правила игровых и следящих камер оригинала остаются
|
||||
неподтверждёнными.
|
||||
|
||||
## Ограничения точного совпадения
|
||||
|
||||
|
||||
Reference in new issue
Block a user