LookAt原理

原理

就是两次Cross算出x轴、y轴,然后利用模型空间坐标轴得到变换矩阵,确切点说是旋转矩阵,LookAt只是把物体旋转了下,并不会涉及缩放和平移。

第1次Cross是根据y-z轴所在的平面求出x轴

第2次Cross是根据x-z轴所在平面求出y轴

 

验证

复制代码
public class MyLookAtTest : MonoBehaviour
{

    void Start()
    {
        this.transform.LookAt(new Vector3(2, 2, 2));
    }

    static void MyLookAt(Vector3 from, Vector3 to, Vector3 upHint)
    {
        var zaxis = to - from;
        zaxis.Normalize();
        Gizmos.color = Color.blue;
        Gizmos.DrawLine(Vector3.zero, zaxis * 3);

        var xaxis = Vector3.Cross(upHint, zaxis); //upHint只是一个参考向量, 用于确定y-z轴所在平面的。x轴垂直于y-z轴所在平面
        xaxis.Normalize();
        Gizmos.color = Color.red;
        Gizmos.DrawLine(Vector3.zero, xaxis * 3);

        var yaxis = Vector3.Cross(zaxis, xaxis); //y轴垂直于x-z轴所在平面
        yaxis.Normalize();
        Gizmos.color = Color.green;
        Gizmos.DrawLine(Vector3.zero, yaxis * 3);
    }

    void OnDrawGizmosSelected()
    {
        MyLookAt(Vector3.zero, new Vector3(2, 2, 2), Vector3.up);
    }

}
复制代码

没运行的时候,并没有LookAt圆球

运行后,LookAt圆球,我们的调试画的线也与模型空间的坐标轴是重合的

 

相关函数

Quaternion.LookRotation
Transform.LookAt
Matrix4x4.LookAt

 

posted @   yanghui01  阅读(217)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示