在3d地形上垂下2d点

时间:2014-12-28 00:10:36

标签: opengl 3d

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

我有一个三维地形。我在这个地形上有一个点O(x,y,z)和两条穿过这个点的垂直线,它们将作为我的X轴和Y轴。

现在我有一组2d点,位于极坐标(范围,theta)。我需要找到地形上哪些点对应于这些点。我不确定最好的方法是什么。我可以想到两个想法:

让我说我画的是A(x1,y1)。

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

  2. 创建一个垂直于XY平面的半径为“range”的圆,找到地形上的交点,找出哪些是从O可见并且掉落。

  3. 我知道我可以找到满足条件的几个点,所以我会根据地形进行进一步的检查,但是现在我需要得到一个满足这个条件的较小的集合。

    我是opengl的新手,但我的几何图形非常好。我想知道在opengl中是否存在这样的东西,因为它是地面测量系统的标准问题。

2 个答案:

答案 0 :(得分: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测量的),则转换有点复杂但是仍然可以做到。

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

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

  • 选择最近的(x,y)点并取出该高度;或
  • 根据高度贴图中的周围点插值(x_i,y_i)处的高度。

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

答案 1 :(得分:0)

阅读你的描述我看到一点混乱......也许。

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

角度(t)只能从一个轴测量。选择哪个轴将是您的北极并坚持。然后你衡量你有和 - 瞧! - 你有自己的位置。如果您不使用它,那么设置2D坐标的重点是什么?相反,你要为混音添加可见性 - 我认为它很重要,但是方位角(t)上的最高地形点不是必须的,它将在(r)范围内。

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

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