在OpenGL中使用正确的经度和纬度在地球上渲染点

Yon*_*han 4 opengl latitude-longitude

从经度和纬度数据中获取正确的输出,我一直在打破我的头脑.通过在谷歌地图中绘制数据,我知道这些数据是正确的.例如,我将显示这些纬度和长坐标的数据:经度:4.905396纬度:52.364643

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

现在,当我在我的应用程序中绘制它时,它看起来如下: 自制应用程序显示位置

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

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

将纬度和经度转换为3D空间中的点

球体上的3D坐标到纬度和经度

这两个似乎有很好的例子清楚的解释,但似乎没有任何作用.我现在正在做的是计算3D空间中的位置,然后对其进行标准化,并将其用作在末尾绘制带点的线的方向,如我在应用程序的屏幕截图中所示.当使用在大多数示例中使用的地球半径时,这与仅从中心到计算位置的绘制线没有区别.

我目前的公式是:

X = r * cos(latitude) * cos(lontitude);
Y = r * cos(latitude) * sin(longitude);
Z = r * sin(latitude);
Run Code Online (Sandbox Code Playgroud)

我知道这是错的,但我已经浏览了我在网上看到的所有例子,但没有人向我展示正确的数据.通过使用谷歌地图的数据进行测试,我知道至少输入是正确的.

UPDATE1:

我检查了纹理的拓扑结构,当纬度和经度为0.0000和0.0000时会发生这种情况: 纬度和经度检查0.0000和0.0000

所以这意味着这已经错了,但它有一个奇怪的偏移,因为谷歌地图显示它应该是这样的: 谷歌地图经度和纬度0.0000,0.0000

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

我从中获得了:Shadedrelief Natural Earth纹理

更新2:我已经用纹理检查了我的球体的拓扑结构,似乎关闭了0.0和0.0,但我也怀疑我的公式.我尝试了很多不同的网络,其中一些得到的0.0 0.0与我的第一个公式相同,但很多都没有.我的经度和纬度是-180~180和-90~90.

更新3:这是关于阿姆斯特丹的一个情节的视图,它的一点点,就像0.0 0.0纬度/长的piont.在某个地方我想是地图或计算错了.我会尝试调整纹理以稍微移动一下. 几乎固定

Eri*_*son 7

首先必须以弧度为单位,而不是度数.

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

但是,在屏幕上显示Y up和Z的视图更常见.

检查如何生成纹理坐标以查看与sin一起使用的轴.