aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-07-18 14:35:00 +0300
committerValentin Popov <valentin@popov.link>2026-07-18 14:35:00 +0300
commit2a793f1854231be6da930a3692dce691a6426211 (patch)
treefb0cefbdf2d8e2e3dbb883f8fd696b4d25c86a80 /docs/tomes
parent468ecc4e325178c116f0de25f47736eaec2a1e15 (diff)
downloadfparkan-2a793f1854231be6da930a3692dce691a6426211.tar.xz
fparkan-2a793f1854231be6da930a3692dce691a6426211.zip
feat(render): apply recovered TMA orientation
Diffstat (limited to 'docs/tomes')
-rw-r--r--docs/tomes/05-render.md33
1 files changed, 20 insertions, 13 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index 48b93e3..0043722 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -1437,16 +1437,20 @@ on its XY diagnostic projection until a runtime supplies a real legacy camera;
selecting source-world coordinates with identity camera would be a misleading
empty/off-screen viewer rather than a compatibility result.
-Static analysis of GOG `iron3d.dll` now recovers an exact adjacent placement
-primitive: RVA `0x36610` evaluates a row-major affine
-`Rz(z) * Ry(y) * Rx(x)` and writes translation in the final column. The
-backend-neutral `LegacyIron3dEulerTransform` preserves that finite portable
-formula with a golden yaw-vector test. This is deliberately not wired to TMA:
-AutoDemo records strongly suggest the candidate `(0, 0, z)` radians (all eight
-objects have zero first two values and `z` in approximately `[-pi, pi]`), but
-the current static trace has not proved that those raw record fields reach this
-builder unchanged for every mission object category. The remaining link needs
-a direct loader-to-builder dataflow or a dynamic placement capture.
+Static analysis of GOG `iron3d.dll` recovers the placement primitive at RVA
+`0x36610`: it evaluates a row-major affine `Rz(z) * Ry(y) * Rx(x)` and writes
+translation in the final column. The backend-neutral
+`LegacyIron3dEulerTransform` preserves that finite portable formula with golden
+yaw and scaled-point tests. A read-only elevated AutoDemo scan closes the
+previous TMA binding gap for static placement: it finds the exact raw mission
+records (position, `(0, 0, z)`, scale) and live object blocks at the same
+world positions. For example, `z = 1.6262363` produces the observed pair
+`-sin(z) = -0.99846`, `cos(z) = -0.05541`; matching pairs occur for the other
+observed objects. The opt-in captured-camera path therefore applies
+`R * (scale * local_position) + translation` before Vulkan upload. It remains
+a static-placement contract: dynamic/animated transforms, physics ownership,
+terrain material selection, lighting and gameplay parity are still separate
+evidence tasks.
`VulkanSmokeRenderer::set_camera` now accepts a new finite camera between frame
submissions and uses it for the next command buffer without rebuilding the
@@ -1494,9 +1498,12 @@ indices remain decoded in their original 16-bit representations and are widened
only at the static-render bridge. A regression test crosses the former boundary.
The full captured-camera AutoDemo preview completed at 13.369 seconds and
rendered three 1280×720 native frames: 8 mission objects, 66 mesh components,
-67 material descriptors, and zero Vulkan validation warnings or errors. It is
-still a static source-world preview: raw mission orientation, terrain material
-selection, lighting and animation have not yet been claimed as parity.
+67 material descriptors, and zero Vulkan validation warnings or errors. A later
+orientation-enabled run rendered the same full scene for three 1280×720 frames
+with `validation_warnings=0`, `validation_errors=0` and readback hash
+`6406107678925513509`. It is still a static source-world preview: terrain
+material selection, lighting, animation, physics and gameplay behavior have
+not yet been claimed as parity.
A fresh no-input launch of the canonical `iron_3d.exe` did create a responsive
window titled `Parkan. Железная Стратегия`. A read-only probe then requested