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); }