unity, 相机空间 与 相机gameObject的局部空间

    xiaoxiao2021-03-26  20

    在unity里 相机空间 与 相机gameObject的局部空间 不重合。

    Camera.worldToCameraMatrix的文档中有这样一句话:

    Note that camera space matches OpenGL convention: camera's forward is the negative Z axis. This is different from Unity's convention, where forward is the positive Z axis.

     

    意思是说unity中相机gameObject的蓝轴是相机空间的-Z。

    为了确认,做了如下实验:

    如图,立方体的坐标是(0,0,0),相机的坐标是(0,0,-3),我们要计算并输出立方体在相机空间的坐标。

    做法是为立方体添加如下脚本:

    using UnityEngine; using System.Collections; public class printPosInCameraSpace : MonoBehaviour {     public GameObject m_cameraRef;     // Use this for initialization     void Start () {         Matrix4x4 worldToCameraMat = m_cameraRef.GetComponent<Camera>().worldToCameraMatrix;         Vector3 thisPosInWorld = transform.position;         Vector3 thisPosInCamera = worldToCameraMat.MultiplyPoint (thisPosInWorld);         Debug.Log (thisPosInCamera);     } }

    并在编辑器中将camera赋给m_cameraRef.

    然后运行脚本,得到输出结果为:(0,0,-3)。

    这说明相机gameObject的蓝轴确实是相机空间-Z轴。

    进一步实验:

    将脚本改为:

    using UnityEngine; using System.Collections; public class printPosInCameraGameObjectLocalSpace : MonoBehaviour {     public GameObject m_cameraRef;     // Use this for initialization     void Start () {         Matrix4x4 worldToCameraMat = m_cameraRef.transform.worldToLocalMatrix;         Vector3 thisPosInWorld = transform.position;         Vector3 thisPosInCamera = worldToCameraMat.MultiplyPoint (thisPosInWorld);         Debug.Log (thisPosInCamera);     } }

    输出结果为:(0,0,3)。

     

    --结论:

    相机空间 和 相机gameObject的局部空间 是不重合的。图中这三个坐标轴表示的是 相机gameObject的局部空间。 而 相机空间 则Z轴方向与之相反。

    Camera.worldToCameraMatrix是 世界空间to相机空间 矩阵。Camera.transform.worldToLocalMatrix是 世界空间to相机gameObject的局部空间 矩阵,两个矩阵是不一样的。

    转自:http://www.cnblogs.com/wantnon/p/4570188.html

    转载请注明原文地址: https://ju.6miu.com/read-658513.html

    最新回复(0)