gpt4 book ai didi

opengl - 在OpenGL中以正确的经度和纬度在地球上渲染点

转载 作者:行者123 更新时间:2023-12-04 23:26:55 28 4
gpt4 key购买 nike

从经度和纬度数据中获得正确的输出,我一天中的大部分时间都在头疼。我知道这个数据是正确的,通过在谷歌地图中绘制它。例如,我将显示这些经纬度坐标的数据:
经度:4.905396
纬度:52.364643

在谷歌地图中绘制时,它显示了正确的位置,即荷兰的阿姆斯特丹:
PLotting location of amsterdam on gmaps

现在,当我在我的应用程序中绘制它时,它看起来如下:
selfmade app showing location

是的,谷歌地图是 2D 表示,我的是 3D,但这只是为了证明经度和纬度值是正确的,所以如果我将它们转换为 3D 空间的公式是正确的,它们应该出现在同一个位置。

我一直在阅读网络上的很多文章以及 stackoverflow 本身。
我已经阅读了这些文章并应用了我看到的所有不同类型的公式:

Convert Latitude and Longitude to point in 3D space



3D coordinates on a sphere to Latitude and Longitude

这两个似乎有很好的例子的明确解释,但似乎没有任何效果。我现在正在做的是计算 3D 空间中的位置,然后对其进行归一化并使用它作为方向来绘制一条末端带有点的线,正如您在我的应用程序的屏幕截图中看到的那样。当使用大多数示例中使用的地球半径时,这与仅从中心绘制一条线到计算位置没有什么不同。

我现在的公式是:

X = r * cos(latitude) * cos(lontitude);
Y = r * cos(latitude) * sin(longitude);
Z = r * sin(latitude);

我知道这是错误的,但我浏览了我在网上看到的所有示例,但没有一个显示正确的数据。通过使用来自谷歌地图的数据进行测试,我知道至少输入是正确的。

更新1:

我检查了纹理的拓扑结构,当它的纬度和经度分别为 0.0000 和 0.0000 时会发生这种情况:
Latitude and longitude check with 0.0000 and 0.0000

所以这意味着这已经是错误的,但它的偏移量是奇数,正如谷歌地图显示的那样,它应该是这样的:
google maps latitude and longitude 0.0000, 0.0000

绿色箭头是 0.0000、0.0000 标记。所以我的很明显,它偏向一边。
我认为它可能(不这么认为/希望如此)是纹理,我正在使用这个:
http://naturalearth.springercarto.com/ne3_data/16200/textures/2_no_clouds_16k.jpg

我从中获得的: Shadedrelief Natural Earth textures

更新 2:
我用纹理检查了我的球体的拓扑结构,它似乎对 0.0 和 0.0 关闭,但我也怀疑我的公式。我从网上尝试了很多不同的方法,其中一些得到的 0.0 0.0 与我的第一个公式相同,但很多都没有。我的经度和纬度以-180~180和-90~90为单位。

更新 3:
这是阿姆斯特丹地 block 的 View ,它有点偏离,就像 0.0 0.0 lat/long piont。我猜 map 或计算在某个地方是错误的。我会尝试调整纹理以稍微移动。
almost fixed

最佳答案

您必须首先将角度设为弧度,而不是度数。

然后检查:哪个轴向上?您的公式与 Z 向上(北极)和 X 在屏幕外(您将地球旋转到 0,0)一致

然而,更常见的是用 Y 向上和 Z 在屏幕外渲染 View 。

检查纹理坐标是如何生成的,以查看哪个轴与 sin 一起使用。

关于opengl - 在OpenGL中以正确的经度和纬度在地球上渲染点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511988/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com