在添加的图像中,您可以看到映射在球体上的 uv 四边形,我需要一种方法以类似的方式将盒子映射到球体上,如果投影仅适用于 < 180 degrees.
我还没有真正找到任何有用的东西,我尝试使用一个三角形将给定角度转换为长度,但 sdf 区域与投影的 uv 不匹配
有关投影应用的更多细节会很有用。 SDF 在光线行进中通常很有用;但是,尚不清楚您想要实现什么目标。
要将球体上的 XYZ 坐标转换为长方体上的 UV 坐标,一种方法是将球体上的位置除以其最长轴的长度。这将导致球体坐标投影到所指向的盒子的一侧。这在 HLSL 中可能是这样的:
float3 sphereCoordToBoxUV(float3 sphereCoord, float3 sphereOrigin)
{
// Subtract the origin, so ray has its tail at the origin
sphereCoord -= sphereOrigin;
// Divide by the largest coordinate
sphereCoord /= max(sphereCoord.x, max(sphereCoord.y, sphereCoord.z));
return sphereCoord;
}
请注意,在 HLSL 中,您可以使用原始球体坐标,如果您打算将其与
TextureCube
一起使用,GPU 会将其投影到立方体上。