我在scenekit中制作了3D地球模型,我想根据经度和纬度在这个模型上放置东西,不知道从哪里开始。如何将坐标应用于xcode的scenekit中的三维地球模型?
回答
你不需要进入复杂的数学来做到这一点。你需要做的就是添加两个额外的助手节点。
让我们假设地球由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.eulerAngles
Y分量以弧度为经度角latitudeHanlde.eulerAngles
Z分量纬度角度操纵你的站的经度/纬度位置
它应该看起来像
longitudeHandle.eulerAngles = SCNVector3Make(0, LONGITUDE, 0);
latitudeHanlde.eulerAngles = SCNVector3Make(0, 0, LATITUDE);
使用这些嵌套帮手节点的另一个好处是,该站将始终垂直于其父母的X轴和行星表面,而如果您使用复杂的数学运算将其定位在轨道上并希望实现相同效果变得更加复杂。
另外,你应该能够做同样的,只有一个助手(定位)节点,取其“旋转”属性,你所熟悉的定向它在三维空间
.eulerAngles // SCNVector3
.rotation // SCNVector4
.orientation // SCNQuaternion
.transform // SCNMatrix4, includes position and scale
但这将需要一些数学和/或矩阵或四元数的使用(我还没有花时间学习)。
忘记提及:弧度=度* PI/180 – Sulevus
好的解释,upvoted,但出于兴趣,你如何得出这样的结论,没有复杂的地图是必需的?地球不是一个完美的球体,并且在没有任何数学的情况下将长/拉映射到完美的3D球体模型上(例如这里提到:http://stackoverflow.com/questions/5674149/3d-coordinates-on-a-sphere-纬度和经度),不会显示对象的确切位置,而是估计值,还是错过了某些东西? – 2017-04-17 22:02:12
- 1. 如何将三维空间坐标转换为二维空间坐标?
- 2. 在三角测量之后将地球坐标转换为局部坐标
- 3. 三维坐标图形
- 4. 坐标由地理坐标向球形坐标的转换
- 5. 斯威夫特3 - SceneKit获取三维模型比例值
- 6. Swift 3 - SceneKit获取三维模型X Y Z旋转值
- 7. 三维坐标到二维屏幕坐标与正交矩阵
- 8. 如何计算OpenCV中一个点的三维坐标
- 9. 在ActionScript中创建三维坐标系加上三维矢量?
- 10. 如何在PostGIS中检查三维坐标与三维边界框?
- 11. 如何将3D模型添加到SceneKit?
- 12. 如何将45°-135°坐标系统的坐标值转换为地球坐标系统?
- 13. 如何将JavaScript中的地理坐标转换为C中的地理坐标#
- 14. 把二维数组中的三维世界坐标
- 15. 生成地球的所有坐标?
- 16. Mathematica三维坐标在单独的列表中的x和y轴坐标
- 17. 如何知道a帧场景中鼠标点击的三维坐标位置
- 18. Java /图形:绘制三维坐标?
- 19. 三维从点坐标和角
- 20. 如何将瓷砖应用于特定的坐标和尺寸?
- 21. 如何将绝对坐标应用于视图内的对象?
- 22. 在三维坐标系中查找矩形中的角度点
- 23. 获取谷歌地图中的第三个三角点坐标
- 24. ViewVector在地球上两个球面坐标之间的转换
- 25. 如何在Matlab中的三维散点图中加粗图例和坐标轴
- 26. 在地图上构建基于坐标的三角形
- 27. 在lansdscape模式下的xcode坐标
- 28. 球体的XYZ坐标
- 29. 谷歌地球api获取坐标
- 30. Actionscript 3D如何围绕三维坐标旋转
欢迎来到SO保罗。这个问题超出了这个问题的范围,它太广泛了。将真实生活坐标映射到自定义3D模型并不是一项简单的任务。 – 2017-04-05 04:15:38
@Sneak即时通讯尝试使用3D地球模型制作iss(国际空间站)跟踪器,该模型根据此API显示iss的位置:http://api.open-notify.org/iss-now.json –
您需要做大量计算并将数字映射到您的自定义模型。它需要一些工作和一些伟大的数学。看看这些线索我找到你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