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

4
我一整天都在为获取正确的经纬度数据输出而苦恼。我知道这些数据是正确的,因为我已经在谷歌地图上绘制了它们。例如,我将展示这些纬度和经度坐标的数据: 经度:4.905396 纬度:52.364643
在谷歌地图中绘制时,它显示了正确的位置,即荷兰的阿姆斯特丹: PLotting location of amsterdam on gmaps 现在,当我在我的应用程序中绘制它时,它看起来如下所示: selfmade app showing location 是的,谷歌地图是二维表示,而我的应用程序是三维的,但这只是为了证明经度和纬度值是正确的,因此,如果我的将它们转换为三维空间的公式是正确的,它们应该出现在同一个位置。
我已经阅读了很多网络文章,以及stackoverflow本身。我已经阅读了这些文章,并应用了我看到的所有不同类型的公式: 将纬度和经度转换为三维空间中的点

并且

在球面上的3D坐标转换成经纬度

这两个似乎有清晰的解释和良好的示例,但没有任何作用。我现在正在做的是计算三维空间中的位置,然后将其归一化,并将其用作绘制带有点的线条的方向,如您可以在应用程序的屏幕截图中看到的那样。当使用大多数示例中使用的地球半径时,这与仅从中心绘制一条线条到计算出的位置没有区别。

我的当前公式是:

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

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

更新1:

我检查了纹理的拓扑结构,当其纬度和经度均为0.0000时会出现以下情况: Latitude and longitude check with 0.0000 and 0.0000

所以这意味着这已经是错误的了,但它有一个奇怪的偏移量,就像Google地图所显示的那样,应该是这样的: 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: 这是阿姆斯特丹的地图视图,它有点偏离,就像0.0 0.0的纬度/经度点一样。我猜地图或计算有误。我会尝试将纹理适应一下,稍微移动一下。 几乎修复

7
你有检查纹理坐标以确保你的纹理放在正确的位置吗? - Reed Copsey
2
为了对齐两者 - 使用纬度/经度= 0,0,并使纹理与您的建模工具内的预期点重合(如果您通过代码创建球体,则使用UV映射代码)。之后,您的所有其他纬度/经度都应该是正确的。 - Ani
2
谷歌如何在巴西旁边显示“0,0”? “0,0” 明显在赤道上并位于英格兰正下方。您的带有“0,0”的三维图片看起来对我相当正确! - Shahbaz
当我添加另一个位置,比如阿姆斯特丹时,它出现在一个奇怪的位置。完全不接近阿姆斯特丹。 - Yonathan
1
尝试在谷歌上搜索“大地测量到ECEF”。 - TreyA
显示剩余4条评论
2个回答

7

首先,您必须将角度转换为弧度。

然后检查:哪个轴是向上的?您的公式与Z向上(北极)和X离屏幕(您已经旋转地球以查看0,0)一致。

但是,更常见的是使用Y向上和Z离开屏幕来渲染视图。

检查纹理坐标生成方式,以查看使用sin的轴。


我真是太惊讶了,我刚刚在纸上画出来,你百分之百正确。看来我确实搞错了,现在我已经修正过来了。我不得不在Maya中稍微调整一下地球的旋转,但没关系,现在一切都对齐了。非常感谢! - Yonathan

1

我已经确认过了,我在 SO 的其他问题中找到了这个答案,但还是谢谢! - Yonathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接