通过以下教程完成本教程: https://learnopengl.com/PBR/IBL/Diffuse-irradiance
我遇到了这段代码:
const vec2 invAtan = vec2(0.1591, 0.3183);
vec2 SampleSphericalMap(vec3 direction)
{
vec2 uv = vec2(atan(direction.z, direction.x), asin(direction.y));
uv *= invAtan;
uv += 0.5;
return uv;
}
我的问题是它来自何处以及魔法" invAtan"常数β
答案 0 :(得分:4)
您发布的图片是equirectangular projection旁边拍摄的360度照片的Colosseum in Rome, Italy。
invAtan
常量是2PI
和PI
的{{3}}:
0.1591
= 1/6.28319
(=> 2PI
)=弧度360度
0.3183
= 1/3.14159
(=> PI
)=弧度180度
所以你从reciprocal(or multiplicative inverse)到cartesian coordinates转到uvs,请参阅polar angles。在更实际的术语中,假设给定direction
被归一化(因此映射到this great resource(headline: Direct Polar))乘以invAtan
将值转换为[-.5,.5]
范围,添加.5
}导致uv查找坐标的范围为[0,1]
。