diff --git a/samples/03_model_render/shader/eqrectToCube.cs.hlsl b/samples/03_model_render/shader/eqrectToCube.cs.hlsl index 7d822ff..9629338 100644 --- a/samples/03_model_render/shader/eqrectToCube.cs.hlsl +++ b/samples/03_model_render/shader/eqrectToCube.cs.hlsl @@ -12,11 +12,11 @@ Block pcb; float2 SampleSphericalMap(float3 v) { - const float2 invAtan = float2(0.1591f, 0.3183f); - float2 uv = float2(atan2(v.x, v.z), asin(v.y)); - uv *= invAtan; - uv += 0.5; - return uv; + const float2 InvTan = float2(0.1591f, 0.3183f); // (1/2PI, 1/PI) + float2 UV = float2(atan2(-v.x, v.z), asin(-v.y)); // (-PI, -PI/2) to (PI, PI/2) + UV *= InvTan; // (-1/2, -1/2) to (1/2, 1/2) + UV += 0.5f.xx; // (0, 0) to (1, 1) + return UV; } /* @@ -39,15 +39,15 @@ void main(uint3 GlobalInvocationID : SV_DispatchThreadID) if (GlobalInvocationID.z < 2) { - LocalDir = float3(AxisSign * HalfSide, GlobalInvocationID.y - HalfSide, (GlobalInvocationID.x - HalfSide) * AxisSign); + LocalDir = float3(AxisSign * HalfSide, HalfSide - GlobalInvocationID.y, (HalfSide - GlobalInvocationID.x) * AxisSign); } else if (GlobalInvocationID.z < 4) { - LocalDir = float3(GlobalInvocationID.x - HalfSide, -AxisSign * HalfSide, -AxisSign * (GlobalInvocationID.y - HalfSide)); + LocalDir = float3(GlobalInvocationID.x - HalfSide, AxisSign * HalfSide, AxisSign * (GlobalInvocationID.y - HalfSide)); } else { - LocalDir = float3((GlobalInvocationID.x - HalfSide) * AxisSign, GlobalInvocationID.y - HalfSide, -AxisSign * HalfSide); + LocalDir = float3((GlobalInvocationID.x - HalfSide) * AxisSign, HalfSide - GlobalInvocationID.y, HalfSide * AxisSign); } float2 UV = SampleSphericalMap(normalize(LocalDir));