投影在球体上的盒子的 Sdf

问题描述 投票:0回答:1

在添加的图像中,您可以看到映射在球体上的 uv 四边形,我需要一种方法以类似的方式将盒子映射到球体上,如果投影仅适用于 < 180 degrees.

球体上的紫外线

二维示例

我还没有真正找到任何有用的东西,我尝试使用一个三角形将给定角度转换为长度,但 sdf 区域与投影的 uv 不匹配

shader projection hlsl sdf raymarching
1个回答
0
投票

有关投影应用的更多细节会很有用。 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 会将其投影到立方体上。

© www.soinside.com 2019 - 2024. All rights reserved.