2017-04-05 53 views
0

我在scenekit中制作了3D地球模型,我想根据经度和纬度在这个模型上放置东西,不知道从哪里开始。如何将坐标应用于xcode的scenekit中的三维地球模型?

+0

欢迎来到SO保罗。这个问题超出了这个问题的范围,它太广泛了。将真实生活坐标映射到自定义3D模型并不是一项简单的任务。 – 2017-04-05 04:15:38

+0

@Sneak即时通讯尝试使用3D地球模型制作iss(国际空间站)跟踪器,该模型根据此API显示iss的位置:http://api.open-notify.org/iss-now.json –

+0

您需要做大量计算并将数字映射到您的自定义模型。它需要一些工作和一些伟大的数学。看看这些线索我找到你http://stackoverflow.com/questions/15211776/earth-latitude-longitude-to-latitude-longitude-on-a-3d-sphere http://stackoverflow.com/questions/10473852/convert-latitude-and-longitude-point-in-3d-space http://stackoverflow.com/questions/11511988/rendering-dots-on-a-globe-with-correct-longitude-and-latitude- in-opengl http://stackoverflow.com/questions/5674149/3d-coordinates-on-a-sphere-to-latitude-and-longitude – 2017-04-05 04:37:19

回答

1

你不需要进入复杂的数学来做到这一点。你需要做的就是添加两个额外的助手节点。

让我们假设地球由earthNode表示,其几何形状(球体)位于节点的中心,半径为100个点。

向中心添加一个子节点,中心名为longtudeHandle,没有任何几何图形。

现在添加另一个子节点到第一个latitudeHandle,没有任何几何。

然后,您将空间站节点stationNode作为子项添加到latitudeHandleNode,但在中心添加了而不是。沿着X轴偏移105点,使其位于“赤道”上方5点。

SCNNode * longtudeHandle = [SCNNode node]; 
[earthNode addChildNode:longtudeHandle]; 

SCNNode * latitudeHandle = [SCNNode node]; 
[longtudeHandle addChildNode:latitudeHandle];  

stationNode.position = SCNVector3Make(105, 0, 0); 
[latitudeHandle addChildNode:stationNode]; 

您应该具有以下节点图最终在场景

earthNode 
    | 
    |--------longitudeHandle 
       | 
       |----------latitudeHandle 
          | 
          |-----------stationNode 

因此,您有4个嵌套的坐标系统和每个节点的3D旋转根据其父节点坐标系统设置。

然后,您可以用弧度使用

  • longitudeHanlde.eulerAnglesY分量以弧度为经度角
  • latitudeHanlde.eulerAnglesZ分量纬度角度操纵你的站的经度/纬度位置

它应该看起来像

longitudeHandle.eulerAngles = SCNVector3Make(0, LONGITUDE, 0); 
latitudeHanlde.eulerAngles = SCNVector3Make(0, 0, LATITUDE); 

使用这些嵌套帮手节点的另一个好处是,该站将始终垂直于其父母的X轴和行星表面,而如果您使用复杂的数学运算将其定位在轨道上并希望实现相同效果变得更加复杂。


另外,你应该能够做同样的,只有一个助手(定位)节点,取其“旋转”属性,你所熟悉的定向它在三维空间

.euler​Angles // SCNVector3 
.rotation  // SCNVector4 
.orientation // SCNQuaternion 
.transform // SCNMatrix4, includes position and scale 

但这将需要一些数学和/或矩阵或四元数的使用(我还没有花时间学习)。

+0

忘记提及:弧度=度* PI/180 – Sulevus

+0

好的解释,upvoted,但出于兴趣,你如何得出这样的结论,没有复杂的地图是必需的?地球不是一个完美的球体,并且在没有任何数学的情况下将长/拉映射到完美的3D球体模型上(例如这里提到:http://stackoverflow.com/questions/5674149/3d-coordinates-on-a-sphere-纬度和经度),不会显示对象的确切位置,而是估计值,还是错过了某些东西? – 2017-04-17 22:02:12

相关问题