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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!