找回密码
 立即注册
查看: 246|回复: 0

Unity3D游戏开发常用算法:3D游戏开发中的矩阵详解

[复制链接]
发表于 2023-3-29 14:06 | 显示全部楼层 |阅读模式
前言

矩阵很多同学没有接触过,所以感觉很难,很复杂,其实只要学过矩阵的同学都知道,矩阵运算并不难。今天我们给大家讲讲游戏开发中的矩阵的运算。
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!
1:矩阵是什么?


上述变换中,xb 是由xa, ya 经过线性运算而得到得。如果xb = A*xa^2 + B*ya + C,这样就不是线性变换了。
数学前辈们为了描述上面的线性变换,发明了矩阵,把上面的变换标记为:


上面的变换,(xa, ya)通过矩阵变换到(xb, yb),用矩阵是如何变换的呢?我们实际就是把(xa, ya)*矩阵 = (xb, yb)。
2: 向量与矩阵, 矩阵与矩阵的乘法;


总结一下向量与矩阵的乘法规则:
新向量的第i个元素,等于原来向量的每个元素与第i列矩阵的每个对应数据相乘后相加。由这个规则,我们可以得到向量与矩阵相乘向量的维度必须和矩阵的行数一样。
很多同学马上就会有疑问了,矩阵既然最后还是要结合元素计算,我干嘛还要用矩阵呢?直接算不就可以么?接下来矩阵得第二个妙处就在于每个线性变化都对应一个矩阵,我们可以把多次线性变换叠加起来,这样就可以减少运算的次数。比如我要把100个点,由V1空间,变换到v2空间,再变换到v3空间。V1到v2对应一个矩阵,v2到v3对应一个矩阵,我们可以把这两个矩阵变换叠加起来变成一个矩阵。100个点,每个点计算一次矩阵乘法即可得到新的点,而不用每个点计算2次矩阵乘法得到新的点。
如何把多个矩阵对应的多次线性变换叠加起来呢?这个就是矩阵与矩阵的乘法。例如


根据上面的规律,新矩阵的对应第i行第j列元素,我们叫做元素ij。矩阵变化的叠加就是矩阵乘法,矩阵乘法的计算规则如下:


3: 游戏开发中的缩放,旋转平移矩阵;


我们叠加在一起运算一下, 先缩放还是先平移,得到的结果不一样,先平移后缩放的结果是 (x, y, 1) 先平移dx, dy, 后缩放3倍,(3x+3*dx, 3y + 3*dy, 1), 先缩放后平移, 得到的结果是(3x+dx, 3y + dy, 1)。
我们反应到矩阵,先平移后缩放,平移矩阵*缩放矩阵,如下:


最后说几个比较特殊的矩阵,单位矩阵,就是乘以这个矩阵后不会发生任何改变,相当于没有变化。
逆矩阵: 矩阵A的反向矩阵叫A的逆矩阵即: A矩阵*A的逆矩阵=单位矩阵, 两个互为逆矩阵的叠加在一起,相当于没有变化。
今天的矩阵就讲解到这里,关注我, 在我们公开课中可以免费获得矩阵的视频讲解的课程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-18 07:35 , Processed in 0.104714 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表