我试图添加pARk示例代码的高度,因此标签出现在感兴趣的地方的顶部附近。
我做的第一件事是向altitude
添加PlaceOfInterest.h
属性并将其填充到ViewController上,每个poi的高度以米为单位。
然后,在ARView上,进行了以下更改:
latLonToEcef(location.coordinate.latitude, location.coordinate.longitude, location.altitude, &myX, &myY, &myZ);
latLonToEcef(poi.location.coordinate.latitude, poi.location.coordinate.longitude, poi.location.altitude, &poiX, &poiY, &poiZ);
placesOfInterestCoordinates[i][2] = (float)u;
我以为就是这样,非常容易。运行项目和...标签埋在地板上。比较应用程序上poi的标签位置,无论上面是否有我的更改,它们几乎都在相同的位置,即使添加高度,转换到ECEF和ENU的值也应该改变一点。
在查看有关Perspective projection的代码,所有使用的矩阵,ECEF,ENU等之前,我几乎没有什么知识。我一直在阅读维基百科中的所有这些概念,以便能够理解代码,以及在此处阅读与此示例代码相关的其他问题 Use of maths in the Apple pARk sample code 以及Android的类似问题...但仍然无法弄清楚为什么高度不会在屏幕上显示。
我尝试将poi的高度乘以5 latLonToEcef(location.coordinate.latitude, location.coordinate.longitude, 5*location.altitude, &myX, &myY, &myZ);
,看看poi的y
位置是否有明显的变化。并且,虽然有一些,但它非常小,标签仍然远离真正的高度。
所以如果有人能给我一些关于我缺少什么的提示,为什么海拔高度没有显示在屏幕上,我会非常感激。
我将我的尝试上传到https://github.com/Tovkal/pARk-with-altitude存储库,以防您希望查看包含更改的代码。如果你运行它,你应该将感兴趣的地方从ViewController更改为你附近的一些。
谢谢!