Unity用矩阵进行坐标转换

Debug.Log(transform.TransformPoint (new Vector3 (12.0f, 12.0f, 12.0f)));

其中new Vector3 (12.0f, 12.0f, 12.0f)为想要变换的自身坐标(所谓的自身坐标是指义父元素为坐标系的坐标),得到的结果为当物体的自身坐标变换到new Vector3 (12.0f, 12.0f, 12.0f)时他所对应的世界坐标。(unity编辑器里的Inspector界面的transform的Position为localPosition,并且当物体没有父元素的时候localposition和position一样)相反的方法是InverseTransformPoint。

Debug.Log(transform.localToWorldMatrix.MultiplyPoint( new Vector3 (12.0f, 12.0f, 12.0f)));

这个于上面那个同理可以换着用

 

转载于:https://www.cnblogs.com/Akishimo/p/4971733.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity3d是一款常用的游戏引擎,而GPS经纬度与空间坐标在游戏开发中也经常被使用。Unity3d中提供了方法完成经纬度和空间坐标的转换。 在Unity3d中,使用LocationService类获取GPS经纬度信息,获取到的经纬度信息为WGS84坐标系下的经纬度。而Unity3d中的坐标系是以Vector3三维向量形式存在,需要将WGS84坐标系下的经纬度转换为Unity3d中的坐标系。 可以使用以下方法将经纬度转换为Unity3d中的坐标系: 1. 使用WGS84坐标系下的经纬度计算出该点在地球球面上的X、Y、Z坐标。 2. 使用转化矩阵将地球球面坐标系下的X、Y、Z转换为Unity3d中的坐标系。 以下是代码示例: ```csharp using UnityEngine; using System; public class GPSToUnity : MonoBehaviour { // 地球平均半径 private const double EarthRadius = 6378137.0; // 转化矩阵 private static readonly Matrix4x4 wgs84ToUnity = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); // 将GPS经纬度转换为Unity3d中的坐标系 public static Vector3 GPSToUnityCoord(double longitude, double latitude) { double lonRad = longitude * (Math.PI / 180.0); double latRad = latitude * (Math.PI / 180.0); double x = EarthRadius * Math.Cos(latRad) * Math.Cos(lonRad); double z = EarthRadius * Math.Cos(latRad) * Math.Sin(lonRad); double y = EarthRadius * Math.Sin(latRad); Vector3 coord = wgs84ToUnity.MultiplyPoint3x4(new Vector3((float)x, (float)y, (float)z)); return coord; } } ``` 以上方法是将经纬度转换为Unity3d中的坐标系,也可以使用相反的方法将Unity3d中的坐标系转换为经纬度。需要注意的是,在坐标系转换中,我们一般使用的WGS84坐标系转化矩阵并不适用于所有情况,可能会存在一定误差。因此在使用中需要根据实际情况选择正确的转换方法,减少误差。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值