【问题标题】:Outline of a sphere after perspective projection?透视投影后的球体轮廓?
【发布时间】:2016-04-25 03:13:34
【问题描述】:

我正在开发一个 3D 映射应用程序,我必须做一些工作,例如从空间中的给定点找出球体(地球)的可见区域,例如剪裁映射区域等.

如果我可以将地球的轮廓投影到屏幕空间中,在那里剪辑多边形,然后再投影回地球表面(纬度/经度),那么一些事情会变得更容易,但我不知道该怎么做.

有没有一种合理的方法可以在透视投影后计算球体的轮廓,然后再将物体投影回球体上?

【问题讨论】:

  • 在 3D 中进行剪辑可能更容易。你如何表示多边形?
  • 多边形只是纬度/经度的国家形状。我需要将这些国家/地区剪辑到地球的可见区域,这样我就可以将它们投影到屏幕空间和光栅中。我正在使用软件而不是 OpenGL 或类似软件来执行此操作。

标签: graphics 3d geometry computational-geometry


【解决方案1】:

您可以在 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)

【讨论】:

  • 我明白了,所以你说的是在 3D 而不是 2D 中将多边形剪辑到平面上。说那个平面和地球的交点会给我可见的地平线多边形是否正确?
  • 是的,没错。剪辑将是 2D/3D 的混合。对于穿过平面的多边形,您还必须将圆考虑在内(作为轮廓),这基本上是 2D 剪裁..
  • 好的,我觉得有道理,我会试试编码,谢谢!
  • 另外:关于如何将您的方程应用于地球的参考椭球体,因为它在技术上不是一个球体?
  • @MerseyViking 是一样的d。不过,不知道为什么我会这样写。更新为更简单的公式。
【解决方案2】:

让我们在球坐标(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 的函数,反之亦然。

【讨论】:

    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多