【问题标题】:Draping 2d point on a 3d terrain在 3d 地形上叠加 2d 点
【发布时间】:2014-12-28 00:10:35
【问题描述】:

我正在使用 OpenTK(OpenGL),一般提示会有所帮助。

我有一个 3d 地形。我在这个地形 O(x,y,z) 上有一个点,两条穿过该点的垂直线将用作我的 X 和 Y 轴。

现在我有一组二维点,它们位于极坐标(范围,θ)中。我需要找到地形上的哪些点对应于这些点。我不确定最好的方法是什么。我能想到两个想法:

假设我正在绘制 A(x1,y1)。

  1. 找到穿过 O 的平面与垂直于 XY 平面的 A 的交点。这会给我一条折线(语义可能已关闭)。现在在这条线上,我找到了一个从 O 可见的点,并且在距离范围内。

  2. 创建一个垂直于 XY 平面且半径为“范围”的圆,找到地形上的交点,找出从 O 处可见的交点并放下休息。

我知道我可以找到几个满足条件的点,所以我会根据地形做进一步的检查,但现在我需要一个更小的满足这个条件的点。

我是 opengl 的新手,但我对几何学的了解非常好。我想知道opengl中是否存在类似的东西,因为它是地面测量系统的标准问题。

【问题讨论】:

  • 什么是 OPENTK?你是说opengl吗?
  • 是的,先生。我会编辑。
  • 所以你基本上是想找到地形上某个点的高度?这取决于您如何表示地形。
  • 我可以选择更容易达到目的。
  • OpenGL 关心的是渲染,它不包括任何此类实用程序。通常,您需要结合 OpenGL 编写或使用数学库。对于 OpenTK,这将是 OpenTK.Math。 A cursory inspection 没有显示任何处理极坐标的函数。

标签: opengl 3d


【解决方案1】:

正如您所说,您提供的两个选项都会给您提供的不仅仅是您需要的一点。据我了解您的问题,您只需将基数从极坐标(r, angle) 更改为笛卡尔坐标(x,y)

这是相当直截了当的。假设两个坐标空间共享原点 O 并且角度是从 x 轴测量的,则点 (r_i, angle_i) 映射到 x_i = r_i*cos(angle_i)y_i = r_i*sin(angle_i)。如果这些假设不正确(即,如果原点不重合或角度不是从平行于 x 轴的radii 测量的),那么转换会稍微复杂一些,但仍然可以完成。

如果您的地形表示为高度图或二维高度数组(例如Terrain[x][y] = z),一旦您在笛卡尔坐标(x_i,y_i) 中找到该点,您就可以找到该点的高度。当然(x_i, y_i) 可能不完全是高度图的[x][y] 索引之一。

在这种情况下,我认为你有几个选择:

  • 选择最近的(x,y)点并取那个高度;或
  • 根据高度图中的周围点在(x_i,y_i) 处插入高度。

不幸的是,我也在学习OpenGL,无法在那里提供任何具体的见解,但我希望这有助于解决您的问题。

【讨论】:

    【解决方案2】:

    阅读您的描述,我看到了一些困惑……也许吧。

    您已经定义了点 O(x,y,z)。很好,这是 3D 坐标系的极点。然后你想找到一个由极坐标定义的点。这也很好 - 它为您提供 2D 位置。基本上你需要做的就是在 3D A'(x,y,0) 中确定位置,因为我们假设你知道 A 在 (r,t) 处的高程,当然你可以从那里的地形做.

    只能从一个轴测量角度 (t)。选择哪个轴将是您的极地北极并坚持下去。然后你测量你拥有的 r 并且 - 瞧! - 你有你的位置。如果您不使用它,那么设置 2D 坐标有什么意义?相反,您正在增加混合的可见性 - 我认为这很重要,但方位角 (t) 上的最高地形点不一定会在范围 (r) 内。

    你有特定的坐标。就像 RonL 建议的那样,转换为 (x,y),从实际地形中找到 (z) 并完成它。

    除非那不是你需要的。但在这种情况下,需要一个不同的问题:你在寻找什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多