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. 计算机考试单招考试面试,最新单招考试面试自我介绍范文
  2. 牛客第四次多校Maximum Mode
  3. Oracle数据库ORA-12516:“listener could not find available handler with matching protocol stack!“问题解决方法
  4. 特性总览:核心特性、数据存储、Web技术、框架整合与测试
  5. 旧项目适配iphone6和iphone plus
  6. java replace第二个_java - 错误的第二个参数类型:从片段内调用.replace() - 堆栈内存溢出...
  7. CDH-CM资源下载
  8. spark机器学习 源码解析及原理分析
  9. Binder机制原理
  10. java redis哨兵配置_redis哨兵配置主从
  11. 计算机相关美文摘抄,写景美文摘抄
  12. DSPE-PEG3-Mal,带有DSPE的基团小分子PEG试剂
  13. python获取当前进程pid_Python获取系统所有进程PID及进程名称的方法示例
  14. 2022年最新山东建筑八大员(市政)模拟考试题库及答案
  15. 2020华师计算机基础客观作业,华师13春计算机基础作业
  16. 内蒙古大学计算机考研复试分数线,内蒙古大学2016年考研复试分数线
  17. java自动违例设计,java违例
  18. jzoj 3812 Mooo Moo
  19. 登录密码显示服务器错误是什么意思,密码和账号都没有错,为什么登教育人人通会显示服务器错误,我该怎么呢?...
  20. 114 Three.js实现深度遮挡的下雨特效

热门文章

  1. Python——绑定与方法调用
  2. 接私活/毕业设计必备,基于SpringBoot+Activiti的Java底层框架的实现
  3. 使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录
  4. TDM和TDMA的经典简述
  5. 23模式--建造者模式
  6. 计算机主板上的命名,电脑主板常见命名规则整理:微星;华硕;技嘉
  7. Node Sass找不到您当前环境的绑定
  8. 视频号运营玩法;以及视频号引流变现赚钱。丨国仁网络资讯
  9. 6个越南主流社交媒体软件简单介绍
  10. idea 链接github 无法成功登陆, SpringCloud Config 分布式配置中心配置