Unity中的矩阵含义

本人第一次写博文,不足的地方请大家指出来,我不会详解它的计算是什么样的,因为同类文章有很多,这个如果读者感兴趣可以自己学习一下相关的手册和知识。

什么是矩阵

简单的说,矩阵就是一个4*4的二维数组,在Unity中为结构体,Matrix4x4就是Unity中的矩阵,你可以通过这个结构体来申请一个矩阵,当然这是个三维矩阵。
1.矩阵每一列的意义:
如果是一个单位正交矩阵,那么在Unity中他就是这样的

如果这是一个游戏物体的变换矩阵,那么就可以得出以下信息,

1.该游戏物体的X,Y,Z,轴的方向与世界坐标系的X,Y,Z轴的方向保持一致,简单的来说,该物体相对于世界坐标系没有发生任何旋转;
2.该物体的在世界坐标系中的坐标为(0, 0, 0)。
矩阵的作用:

  1. 矩阵可以说是Transform组件工作的根本,Transform所需的基本信息都从该单位的矩阵中获得;
  2. 旋转矩阵: 我这里不贴出旋转矩阵,因为你几乎用不到它,而且网上关于旋转矩阵的文章也有很多,我不做详述,告诉读者两个矩阵相乘是没有意义,这个过程太过于抽象,我会在“实践”中具体讲解。

结构体Matrix4x4

接下来介绍Matrix4x4结构体(当然我不会把所有的方法和变量都讲出来,我会说一些我们可能会经常用到的方法或者变量):
1.变量:
Rotation:这里的Rotation是对应Transform组件里的Rotation的,也就是说,你可以通过重构旋转矩阵来得到一个Rotation并且运用到任意一个游戏物体上;
lossyScale:你可以通过这个值来得到一个矩阵所代表物体的尺寸大小;
inverse:倒置,你可以用这个变量来获取一个矩阵的倒置矩阵。
2.函数:
public Matrix4x4(Vector4 column0, Vector4 column1, Vector4 column2, Vector4 column3) :通过该构造函数来构造出一个自己的矩阵;
public static Matrix4x4 Inverse(Matrix4x4 m) : 获取一个矩阵的倒置矩阵。

实践

我之前说过,矩阵矩阵中每一列的含义,接下来我会在Unity中证明这些含义的真确性:
1.前三列的意义:
如果把矩阵的前三列拿出来,每一列数据都可以组成一个Vector3变量,这三个变量分别代表了,物体的X,Y,Z轴的方向,也就是物体的自身坐标系;

这是我重构了一个物体的矩阵后,再将该矩阵的前三列值取出,组成三个单位向量,再使用Debug.DrawRay进行绘制而得到的,你可以很清楚的看的根据前三列值所构建出的方向向量会和物体的坐标轴朝向保持一致。
下面是代码:

matrix = new Matrix4x4(this.transform.right, this.transform.up, this.transform.forward, new Vector4(0, 0, 0, 1));Debug.DrawRay(Vector3.zero, new Vector3(matrix[0, 0], matrix[1, 0], matrix[2, 0]).normalized, Color.red);Debug.DrawRay(Vector3.zero, new Vector3(matrix[0, 1], matrix[1, 1], matrix[2, 1]).normalized, Color.green);Debug.DrawRay(Vector3.zero, new Vector3(matrix[0, 2], matrix[1, 2], matrix[2, 2]).normalized, Color.blue);

构建矩阵的原则:
1. Matrix4x4结构体的构造方法会接收4个Vector4的值,把他们对应到物体,这4个值分别代表物体的·
X,Y,Z轴的方向向量(Vector3会隐式转化为Vector4变量),且前三个向量必须为标准正交基向量,以及一个位置信息,完成上述操作你就可以获取当前的Rotation值,当然是通过你构建的这个矩阵。
注意:Matrix4x4构造函数的第四个变量是一个Vector4变量,且必须是它,因为要保持矩阵的对角线上的值不为0,否则在进行矩阵计算时会出现错误,导致不能得到正确的结果。
2. 填入的向量必须是一组标准正交基。

注意:也许你会说,我做的是一个废操作,因为矩阵在初始化是就会把对应的值填入,所以即使不用矩阵去做,直接用自身的三个方向作为方向输出结果还是一样的,其实这是不同的,如果你明白了这矩阵前三列代表的意义,你就可以随时构建一个任意方向的变换。这也与我文章的主题相符合。

结尾

这是我第一篇文章,这篇文章写的是我对矩阵的理解与运用,重在运用上,希望可以帮读者加快对矩阵的理解,我翻阅了一下网上的文章,大多数文章讲的都太过繁琐,因为毕竟不是每个人的数学水平都很好,所以我在文中没有写一段数学计算,以我自己的经验看,摆出数学公式,不仅不会对自己的理解有帮助,反而会增加自己的疑虑,所以我选择了一个简单粗暴的方式,直接拿出值去试,事实证明是有效果的。如果有写得不够好的地方请尽管提出,但是如果你说我误导人的话,那我就会骂你祖宗十八代的,因为以我实践效果看是没有问题的。可能有不合适的一些话,我会积极改正。

Unity中的矩阵含义相关推荐

  1. Unity中根据矩阵判断一个点在自身的哪一侧

    如果你还不是很理解矩阵的含义那么请转到 https://blog.csdn.net/qq_39426265/article/details/101373494 问题起源 在Unity自带的函数中并没有 ...

  2. Unity中Quaternion的含义及其使用

    官网API文档: file:///Applications/Unity/Unity.app/Contents/Documentation/html/en/ScriptReference/Quatern ...

  3. UNITY中常用矩阵

    内置矩阵变量 含义 UNITY_MATRIX_MVP 当前模型视图投影矩阵 UNITY_MATRIX_MV 当前模型视图矩阵 UNITY_MATRIX_V 当前视图矩阵 UNITY_MATRIX_P ...

  4. Unity中的矩阵Matrix

    Transform Matrix4x4 (1) 如下代码块是计算RectTransform组件的四条边的坐标实例: void Start() {//获取RectTransform的四条边的坐标Rect ...

  5. Unity中的数学基础——矩阵

    一:概念 --矩阵是一个按照长方阵列排列的复数(形如z=a+bi,a和b均为实数的数称为复数)或实数集合 --是一个2*3的矩阵,是一个3*2的矩阵,一个m*n的矩阵A中,一共有m行,n列,一共有m* ...

  6. Unity中的3D数学—02向量与矩阵

    1.向量 1.1 向量的运算 运算 公式 矢量和标量的乘/除法 k v = ( k v x , k v y , k v z ) k\mathbf{v}=(kv_x,kv_y,kv_z) kv=(kvx ...

  7. Unity中的旋转和矩阵操作

    Definition for Matrix4x4 is from unity                 Matrix4x4 matrix = new Matrix4x4();           ...

  8. Unity中ComputeShader入门

    前言 ComputeShader是如今比较流行的一种技术,例如之前的<天刀手游>,还有最近大火的<永劫无间>,在分享技术的时候都有提到它. 本着不学习就可能失业的压力,就来学一 ...

  9. Unity中的多光源

    在Unity中,如果想要使用多光源,比如2个平行光,或者1个平行光+1个点光源,需要在额外的shader pass中进行处理: Pass {Tags {"LightMode" = ...

最新文章

  1. Windows 8 快捷键大全
  2. IP地址修改后ORACLE不能使用问题
  3. ConcurrentModificationException 问题
  4. [总结]Asp.net中的页面乱码的问题
  5. NullPointerException
  6. scikit-learning_特征分析(数据挖掘入门与实践-实验7)
  7. Android 服务器推送技术
  8. Leetcode 349.两个数组交集(哈希容器unordered_set)
  9. html5下拉列表多行显示不出来,为什么我这个代码的效果显示不出来?我要显示的是鼠标经过选项出现下拉菜单栏!求大神提点!!!...
  10. c 语言str.size,C/C++ strlen(str)和str.length()和str.size()的区别
  11. 学习笔记︱深度学习以及R中并行算法的应用(GPU)
  12. 微信小程序 点击复制文本到剪贴板
  13. linux c post上传文件,Linux C语言Http POST上传图片
  14. SQL练习题——店铺UV、访客信息
  15. 磨刀不误砍柴工,掌握DEVC++的一些实用技巧
  16. flac格式转mp3
  17. LaTex学习教程——插入较复杂的表格(合并、换行以及加标题)
  18. 小说更新太慢怎么办_这几部小说因更新太慢,惹得书迷大怒,粉丝扬言要打断作者的腿!...
  19. 【CVE-2021-4043】Linux本地提权漏洞复现
  20. 钉钉机器人智能回复_青岛市市南区税务局:“税博士”智能服务机器人亮相办税服务厅...

热门文章

  1. python编程基础—类与对象
  2. SQL中IF函数的使用
  3. 什么明星有计算机等级证,明星CP名也分等级?朱一龙王一博还好,看到胡一天:太有才了...
  4. android 输入法更换_详解安卓手机输入法和键盘切换方式的教程
  5. 5g网速究竟有多快?比4g快多少?
  6. 【证明】矩阵特征值之和等于主对角线元素之和
  7. Warren E Buffett
  8. 使用Easyexcel对Excel进行读写操作
  9. php 半角全角转换,php 把全角字符转换成半角
  10. 经典算法研究系列:八、再谈启发式搜索算法