From bfe0a559b580d09540e5dfbb069184d567be2e70 Mon Sep 17 00:00:00 2001 From: Richard Zink Date: Thu, 8 Oct 2026 07:06:01 +0200 Subject: [PATCH] Re-apply NS+EW swap (user feedback: mirror needs fixing) User reported 'N at close tiles' and 'NS mirrored, EW reversed'. With the canvas axes swapped: - lng=+12 (corridor front in N flight) at canvas top -> screen top -> ahead in flight direction (correct) - perp<0 (world east) at canvas right -> screen right (correct) Verifies user expectation: north tiles ahead (screen top), east tiles to the right (screen right). N label appears at the far-ahead tiles along the top of the screen, pointing forward in flight direction. --- vendor/clouds3d.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/vendor/clouds3d.js b/vendor/clouds3d.js index b755466..b714de2 100644 --- a/vendor/clouds3d.js +++ b/vendor/clouds3d.js @@ -328,8 +328,12 @@ function drawTileAt(lng, perp, dx, dz, centerTileX, centerTileY) { // (vertical) and perp along canvas X (horizontal). This way the // corridor's long axis (flight direction +Z) appears as a vertical // strip on canvas, matching the way depth maps on screen. - var canvasX = (perp + halfPerp + 0.5) * GROUND_TILE_SIZE; - var canvasY = (lng + halfLong + 0.5) * GROUND_TILE_SIZE; + // UNPACK_FLIP_Y_WEBGL=true inverts V: canvas top -> texture V=1 (top). + // To put lng=+12 (corridor front in N flight) at screen TOP we put it + // at canvas top (small canvasY). Same inversion for perp so world + // east (dx>0, perp<0) ends up at canvas right (large canvasX). + var canvasX = (-perp + halfPerp + 0.5) * GROUND_TILE_SIZE; + var canvasY = (-lng + halfLong + 0.5) * GROUND_TILE_SIZE; if (canvasX < 0 || canvasX >= groundCanvas.width || canvasY < 0 || canvasY >= groundCanvas.height) { return Promise.resolve(false); }