Unity中的数学基础——变换

Unity中的数学基础——变换
⼀:齐次坐标
——齐次坐标就是将原本n维的向量⽤n+1维来表⽰,是⽤于投影⼏何⾥的坐标系统。可以这样理解,在Unity中有透视与正交两种相机模式,笛卡尔坐标系是⽤于正交模式空间下,⽽齐次坐标系是⽤于投影模式空间下
——齐次坐标的表⽰是计算机图形学中的重要⼿段之⼀,在笛卡尔坐标下⽆法区分是⼀个点还是⼀个向量,⽽在齐次坐标下可以明确区分点和向量
——当n+1维的值为0时,表⽰⼀个⽆穷远的点(例如⼀条平⾏的⽕车道,⼀直向远处看则会相交),齐次坐标在编写Shader时可能需要⽤到它
⼆:齐次坐标表⽰的由来
结论:点的齐次坐标可以表⽰为(x,y,z,1),向量的齐次坐标可以表⽰为(x,y,z,0),3D坐标系的齐次坐标可以表⽰为老年人健康码实际使用现状
利⽤向量与点的齐次坐标表⽰⽅法可以验证:
——点与点相减后得到的是⼀个向量
——向量与向量相加减后得到的还是⼀个向量
——点与向量相加减后得到的是⼀个点(移动了向量个距离后的点)
三:仿射变换
仿射变换=线性变换+平移
因为线性变换需要满⾜以下三个条件:
——变换前是直线的,变换后依然是直线
——直线⽐例保持不变
——变换前是原点的,变换后依然是原点
三星笔记本r439
缩放,旋转操作都满⾜上⾯三个条件,但是平移操作不满⾜变换前是原点的,变换后依然是原点这个条件,所以不属于仿射变换。最后得出结论:仿射变换的条件有两个,⼀是变换前是直线的,变换后依然是直线,⼆是直线⽐例保持不变
四:变换矩阵模板
因为平移操作不满⾜线性变换的条件,所以每个矩阵添加了⼀列去表⽰平移(tx/ty/tz分别代表在x/y/z轴上的平移的距离),前⾯的列表⽰缩放和旋转,因为3D游戏中⼀般才会进⾏矩阵计算,所以Unity中的矩阵都是4*4的
五:平移变换
tx代表在x轴上的移动距离,ty代表在y轴上的移动距离,tz代表在z轴上的移动距离
计算⼀个点p(x,y)或p(x,y,z)经过平移后的点。其实就是⼀个点移动⼀个向量的距离,可以理解为⼀个点与⼀个向量的加法宿迁学院图书馆
五:缩放变换
sx代表在x轴上的缩放⽐例,sy代表在y轴上的缩放⽐例,sz代表在z轴上的缩放⽐例
计算⼀个点p(x,y)或p(x,y,z)经过缩放后的点。可以理解为⼀个点与不同轴上的缩放系数的乘法mmpi
六:旋转变换
θ代表旋转的⾓度
七:变换矩阵的逆矩阵
——平移矩阵的逆矩阵
——缩放矩阵的逆矩阵
——旋转矩阵的逆矩阵
三羟甲基丙烷
⼋:复合变换
可以把平移,缩放,旋转结合起来形成⼀个复杂的变换过程,但是矩阵的乘法不满⾜交换律,所以必须按照顺序相乘。例如⼀个点先平移再旋转,计算时必须⽤这个点先乘以平移矩阵再乘以旋转矩阵⽽不能先乘以旋转矩阵再乘以平移矩阵
九:Unity中的变换
——使⽤Matrix4x4.Translate(matrix)创建⼀个平移矩阵
——使⽤Matrix4x4.Rotate(matrix)创建⼀个旋转矩阵
indeo
——使⽤Matrix4x4.Scale(matrix)创建⼀个缩放矩阵
——使⽤Matrix4x4.TRS(matrix)创建⼀个移动,旋转,缩放的复合矩阵
——使⽤matrix.MultiplyPoint(point)或matrix.MultiplyPoint3x4(point)实现⼀个点的复合变换
——使⽤matrix.MultiplyVector(vector)实现⼀个向量的复合变换
private void Awake()
{
//将⼀个点(1,1,1)平移(2,3,0)的操作
Vector3 p = new Vector3(1, 1, 1);
Matrix4x4 matrix = Matrix4x4.Translate(new Vector3(2, 3, 0));
Debug.Log(matrix.MultiplyPoint(p)); //(3,4,1)
}
⼗:通过矩阵变换改变Unity⾃带Cube的Mesh形状

本文发布于:2024-09-22 13:28:17,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/65727.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:招标技术参数
标签:矩阵   变换   向量   旋转   平移   缩放
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议