2012-07-16 73 views
4

从经度和纬度数据获取正确的输出,我一直在努力工作。我知道这个数据是正确的,在谷歌地图中绘制它。例如,我将显示的数据为这些纬度和经度坐标: 经度:4.905396 纬度:52.364643在OpenGL中使用正确的经度和纬度在全球范围内渲染点

当谷歌绘制映射它显示了正确的位置,这是荷兰阿姆斯特丹: PLotting location of amsterdam on gmaps

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

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

我一直在阅读大量的文章在网上以及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); 

哪项是错误的,但我知道伊夫通过我在网络上看到的所有例子中去,并没有给我正确的数据。通过谷歌地图数据测试,我知道至少输入是正确的。

UPDATE1:

我检查了我的纹理的拓扑结构,这是当它的纬度和经度是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: 这是关于阿姆斯特丹的情节的视图,它有点像0.0 0.0 lat/long piont。我想,某处地图或计算是错误的。我会尝试调整纹理以稍微移动一下。 almost fixed

+7

你是否检查过纹理坐标,以确保你的纹理在正确的位置? – 2012-07-16 20:28:47

+2

为了对齐两用lat/long = 0,0,并使纹理与建模工具中的预期点相吻合(如果要通过代码创建球体,则需要UV映射代码)。之后,所有其他经纬度都应该很好。 – Ani 2012-07-16 20:32:17

+0

我们需要了解你如何纹理你的球体,以及纹理和纹理加载器的方向。 – 2012-07-16 20:56:10

回答

4

首先必须有弧度的角度,而不是度。

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

但是,使用Y up和Z out呈现的视图更为常见屏幕。

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

+0

我会被诅咒的,我只是把它画在纸上,而且你100%正确。似乎我确实错了,现在我修好了。我不得不在Maya中调整我的地球自转,但这很好,现在一切正常。非常感谢! – Yonathan 2012-07-17 19:41:45