mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-24 16:10:14 +00:00
Fix NPC orientation (server yaw convention) and nameplate Y projection
coordinates.hpp: serverToCanonicalYaw now computes s - π/2 instead of π/2 - s. The codebase uses atan2(-dy, dx) as its canonical yaw convention, where server direction (cos s, sin s) in (server_X, server_Y) becomes (sin s, cos s) in canonical after the X/Y swap, giving atan2(-cos s, sin s) = s - π/2. canonicalToServerYaw is updated as its proper inverse: c + π/2. The old formula (π/2 - s) was self-inverse and gave the wrong east/west facing for any NPC not pointing north or south. game_screen.cpp: Nameplate NDC→screen Y no longer double-inverts. The camera bakes the Vulkan Y-flip into the projection matrix (NDC y=-1 = screen top, y=+1 = screen bottom), so sy = (ndc.y*0.5 + 0.5) * screenH is correct. The previous formula subtracted from 1.0 which reflected nameplates vertically.
This commit is contained in:
parent
a335605682
commit
7b3b33e664
2 changed files with 14 additions and 8 deletions
|
|
@ -4684,9 +4684,12 @@ void GameScreen::renderNameplates(game::GameHandler& gameHandler) {
|
|||
glm::vec3 ndc = glm::vec3(clipPos) / clipPos.w;
|
||||
if (ndc.x < -1.2f || ndc.x > 1.2f || ndc.y < -1.2f || ndc.y > 1.2f) continue;
|
||||
|
||||
// NDC → screen pixels (Y axis inverted)
|
||||
// NDC → screen pixels.
|
||||
// The camera bakes the Vulkan Y-flip into the projection matrix, so
|
||||
// NDC y = -1 is the top of the screen and y = 1 is the bottom.
|
||||
// Map directly: sy = (ndc.y + 1) / 2 * screenH (no extra inversion).
|
||||
float sx = (ndc.x * 0.5f + 0.5f) * screenW;
|
||||
float sy = (1.0f - (ndc.y * 0.5f + 0.5f)) * screenH;
|
||||
float sy = (ndc.y * 0.5f + 0.5f) * screenH;
|
||||
|
||||
// Fade out in the last 5 units of range
|
||||
float alpha = dist < 35.0f ? 1.0f : 1.0f - (dist - 35.0f) / 5.0f;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue