我正在研究3D地图应用程序,我必须做一些工作,比如从空间中的给定点找出球体(地球)的可见区域,例如剪切映射区域等等。 。
如果我可以将地球的轮廓投影到屏幕空间,在那里剪切多边形,然后投射回地球表面(lat / lon),有几件事变得更容易了,但是我对于如何做到这一点感到很遗憾
是否有合理的方法在透视投影后计算球体的轮廓,然后以合理的方式将物体投射回球体?
答案 0 :(得分:2)
您可以在3D中剪裁多边形。球体的轮廓 - 反投影到3D - 将始终是一个平面上的圆。透视投影不会改变这一点。因此,您可以在平面上剪切所有多边形。
计算飞机并不太难。如果你认为球体的中心是原点,那么这个平面可以用正常形式表示为:
dot(n, x) = d
n
是正常的。这个很容易。它只是从球心到观察者的单位方向向量。
d
是球体中心的距离。这有点难,但不是太难。如果l
是观察者到球体中心的距离,r
是球体半径,那么
d = r^2 / l
这是可用于在3D中剪切多边形的平面。如果您需要圆的半径,可以使用以下公式:
r_c = r / sqrt(1 - r^2/(l-d)^2)
答案 1 :(得分:0)
让我们对球面坐标(cos(u)sin(v),sin(u)sin(v),cos(v))
和任意投影中心(x,y,z)
的球体进行分析。
我们通过线的方向和来自球体原点的矢量的垂直条件表示投影线与球体相切:
(x-cos(u)sin(v))cos(u)sin(v) + (y-sin(u)sinv))sin(u)sin(v) + (z-cos(v)) cos(v) = 0
这简化为
x cos(u)sin(v) + y sin(u)sin(v) + z cos(v) = 1
是经度/纬度坐标中的曲线。您可以将u
解析为v
或相反的函数。