diff --git a/src/lib/bakingUtils.ts b/src/lib/bakingUtils.ts index d45b9ff..e1661b5 100644 --- a/src/lib/bakingUtils.ts +++ b/src/lib/bakingUtils.ts @@ -33,7 +33,7 @@ export function reprojectUVs(geometry: THREE.BufferGeometry, mappingType: 'plana if (mappingType === 'planar') { // Front planar projection u = nx; - v = ny; + v = 1.0 - ny; } else if (mappingType === 'cylinder') { // Cylindrical projection const centeredX = x - center.x; @@ -41,7 +41,7 @@ export function reprojectUVs(geometry: THREE.BufferGeometry, mappingType: 'plana // atan2 returns -PI to PI. We want 0 to 1 around the cylinder. let angle = Math.atan2(centeredZ, centeredX); u = (angle + Math.PI) / (2 * Math.PI); - v = ny; + v = 1.0 - ny; } else if (mappingType === 'sphere') { // Spherical projection const centeredX = x - center.x; @@ -53,7 +53,7 @@ export function reprojectUVs(geometry: THREE.BufferGeometry, mappingType: 'plana let theta = Math.atan2(centeredZ, centeredX); // -PI to PI u = (theta + Math.PI) / (2 * Math.PI); - v = 1.0 - (phi / Math.PI); + v = phi / Math.PI; // 0 at top, 1 at bottom } else if (mappingType === 'box') { // Simple box projection (pick dominant axis based on normal) // This requires normals @@ -65,11 +65,11 @@ export function reprojectUVs(geometry: THREE.BufferGeometry, mappingType: 'plana } const ax = Math.abs(normX), ay = Math.abs(normY), az = Math.abs(normZ); if (ax > ay && ax > az) { - u = nz; v = ny; + u = nz; v = 1.0 - ny; } else if (ay > ax && ay > az) { - u = nx; v = nz; + u = nx; v = 1.0 - nz; } else { - u = nx; v = ny; + u = nx; v = 1.0 - ny; } } @@ -128,7 +128,7 @@ export function bakeTextureToNewUVs( vOldUV = uv2; float finalX = mix(uv.x * 2.0 - 1.0, 1.0 - uv.x * 2.0, uFlipX); - float finalY = mix(uv.y * 2.0 - 1.0, 1.0 - uv.y * 2.0, uFlipY); + float finalY = mix(1.0 - uv.y * 2.0, uv.y * 2.0 - 1.0, uFlipY); gl_Position = vec4(finalX, finalY, 0.0, 1.0); }