根据视角(FOV,缩放)将球坐标转换为笛卡尔

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

我有一个用 WebGL 制作的天空纹理的球形投影,它采用 CameraAngleX、CameraAngleY 和 CameraZoom 参数通过光线方向函数计算坐标:

vec3 GetRayDirection(vec2 uv, vec3 ro, float zoom) {
  vec3  cf = normalize(-ro);
  vec3  cr = normalize( cross( vec3(0,1,0), cf ));
  vec3  cu = cross(cf,cr);
  vec3  c = ro + cf * zoom;
  vec3  i = c + uv.x*cr + uv.y*cu;
  vec3  rd = normalize(i - ro);
  return rd;
}

我需要在这个投影的顶部绑定一些 JavaScript 元素,所以当

Zoom = 1.0
并且没有失真时,使用标准的 spherical-to-cartesian 公式出价效果很好:

x = r * sin(θ) * cos(φ);
y = r * sin(θ) * sin(φ);
x = r * cos(φ);

但是当Zoom小于1.0时出现广角视野畸变,就不行了,因为。根据扭曲的 FOV 投影,屏幕中心的元素移动速度应该比屏幕角落的移动速度慢得多。

我正在寻找一个可以对广角 FOV 进行相同绑定的公式。请告诉我一些公式或文章指向广角球坐标到笛卡尔坐标的转换!谢谢。

camera coordinates projection angle 360-panorama
© www.soinside.com 2019 - 2024. All rights reserved.