【发布时间】:2017-12-06 04:01:33
【问题描述】:
大家好,
我正在尝试将基于经度和纬度的位置转换为 vector3 位置,该位置将放置在 Unity 中的球体上。但是,该位置似乎一直处于关闭状态(与实际位置相比)。
我目前使用以下代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class testPosLatLong : MonoBehaviour {
public float longi;
public float lati;
public float radius;
public Transform marker;
// Use this for initialization
void Start () {
// Transfer to Radians from Degrees
float templongi = longi * Mathf.PI / 180;
float templati = lati * Mathf.PI / 180;
float Xpos = radius * Mathf.Cos(templati) * Mathf.Cos(templongi);
float Ypos = radius * Mathf.Cos(templati) * Mathf.Sin(templongi);
float Zpos = radius * Mathf.Sin(templati);
Debug.Log ("X, Y, Z" + Xpos + " " + Ypos + " " + Zpos);
// Set the X,Y,Z pos from the long and lat
Instantiate(marker);
marker.position = new Vector3 (Xpos, Zpos, Ypos);
}
// Update is called once per frame
void Update () {
}
}
我尝试将经度和纬度设置为零,看起来它在球体上的位置正确:
但是,例如,当我尝试阿姆斯特丹的经度和纬度时,它会给出以下结果(左侧),而它应该是右侧的结果。
我是否遗漏了什么或这里出了什么问题?我尝试了很多谷歌搜索,但找不到任何可以解释我当前问题的东西。项目本身可以在这里找到:https://wetransfer.com/downloads/31303bd353fd9fde874e92338e68573120171205170107/1208ac%3E
希望有人可以提供帮助。
【问题讨论】:
-
你的表面纹理包裹方式和地图图像的投影方式一样吗?
-
你能确认你的经纬度是错误的吗?我问这个问题是因为您比较了纹理上的坐标位置与 Google 地图上的位置。也许问题在于纹理是如何包裹在球体上的,或者是纹理代表行星的准确性。
-
顺便说一句,使用
Mathf.Deg2Rad而不是Mathf.PI/180 -
是的,我想到了纹理和球体格式。但我不确定。我在这里添加了我的整个项目:wetransfer.com/downloads/…(只有球体和位置)。
标签: unity3d position mapping latitude-longitude