首页 > 其他分享 >矩阵变换和Matrix4x4

矩阵变换和Matrix4x4

时间:2023-02-23 00:55:30浏览次数:52  
标签:Log 变换 矩阵 Matrix4x4 var Debug tmpTransform

平移

var m = Matrix4x4.Translate(new Vector3(10, 20, 30));
Debug.Log($"{m}");

 

 

缩放

var m = Matrix4x4.Scale(new Vector3(1, 2, 3));
Debug.Log($"{m}");

 

 

旋转

只有x轴

var m = Matrix4x4.Rotate(Quaternion.Euler(30, 0, 0));
Debug.Log($"{m}");

 

只有y轴

var m = Matrix4x4.Rotate(Quaternion.Euler(0, 30, 0));
Debug.Log($"{m}");

 

x+y轴

var m = Matrix4x4.Rotate(Quaternion.Euler(30, 30, 0));
Debug.Log($"{m}");

 

只有z轴

var m = Matrix4x4.Rotate(Quaternion.Euler(0, 0, 30));
Debug.Log($"{m}");

 

 

复合变换

变换的顺序是scale -> rotate -> translate,先在原点缩放,再在原点旋转,最后再平移。因为Matrix4x4.Scale, Matrix4x4.Rotate都是针对原点进行变换的,如果平移放在最前面,得到的结果就不对了。

写成TRS是因为Unity中的矩阵都是左乘来叠加变换,即越早的变换越在右。

var m = Matrix4x4.TRS(new Vector3(10, 20, 30), Quaternion.Euler(0, 90, 0), new Vector3(1, 2, 3));
Debug.Log($"{m}");

关于为啥是TRS这个顺序:读书笔记---MVP矩阵之M矩阵 - 简书 (jianshu.com)

 

localToWorldMatrix的计算原理

unity中变换矩阵是左乘来叠加效果的,对于向量也是向量在右、矩阵在左。

public static Matrix4x4 MyLocalToWorldMatrix(Transform tf)
{
    var m = Matrix4x4.TRS(tf.localPosition, tf.localRotation, tf.localScale);
    var tmpTransform = tf.parent;
    while (null != tmpTransform)
    {
        m = Matrix4x4.TRS(tmpTransform.localPosition, tmpTransform.localRotation, tmpTransform.localScale) * m; //矩阵左乘叠加
        tmpTransform = tmpTransform.parent;
    }
    return m;
}

 

 

参考 

UnityShader笔记第三课-MVP矩阵原理-M矩阵_啊基米德的博客-CSDN博客

图形学知识基础:变换与矩阵的关系,齐次坐标_王王王渣渣的博客-CSDN博客 

unity中Transform.LocalToWorldMatrix的计算与验证_一个渣渣的世界的博客-CSDN博客

标签:Log,变换,矩阵,Matrix4x4,var,Debug,tmpTransform
From: https://www.cnblogs.com/sailJs/p/16476117.html

相关文章

  • 快速傅立叶变换应用(FFT Applications)
    1.3-SUM1.1问题描述Giventhreesets\(X\),\(Y\),and$Z$of\(n\)integerseach,determinewhetherthereisatriple\(i\inX,j\inY,k\inZ\)suchth......
  • 第二章:电阻电路的等效变换和分析
    !https://zhuanlan.zhihu.com/p/608595705第二章:电阻电路的等效变换和分析1.星三角变换2.桥型电路外部接入电压源\[U_1=U_2\impliesI_{12}=0\]外部接入电流源......
  • 矩阵基础知识
    这边不去理解或推导为什么要这么算,没啥实际意义,都是直接按矩阵规定好的公式套用 加减法C=A+BC=A-Ba) A和B的行和列必须相同   乘法,没有除法C=A*Ba) A的......
  • POJ 1050 To the Max 矩阵最大和的子数组:动态规划
    将原来的矩阵直接改造成dp矩阵dp[i][j]表示以以a[0][0]为左上角a[i][j]为右下角的矩阵之和所以一个O(n......
  • 【线性代数复习笔记】矩阵特征值,特征向量,相似对角化与实对称矩阵
    【线性代数复习笔记】矩阵特征值,特征向量,相似对角化与实对称矩阵线代好难-_-特征值与特征向量:1.求解特征值与特征向量:​ 先计算特征多项式f(ʎ)=|ʎI-A|,求出根,再根据......
  • 快速傅里叶变换
    前言这篇文章咕的很久,三角函数似乎没啥用。三角函数前前言三角函数似乎没啥用。三角函数似乎没啥用。三角函数似乎没啥用。单位圆一个以原点为中心且半径为\(1\)的......
  • python混淆矩阵可视化【热力图】
    依赖包seaborn 和 matplotlib 已经提供了很多种绘制方法了,后文各种方法都是围绕着这个进行的importitertoolsimportnumpyasnpimportpandasaspdimportsea......
  • 【数组与链表算法】矩阵算法在程序中常见的简单应用 | C++
    第二十三章矩阵算法:::hljs-center目录第二十三章矩阵算法●前言●矩阵算法与深度学习●一、矩阵相加●二、矩阵相乘●三、矩阵转置●四、稀疏矩阵●......
  • 线性变换入门:线性基
    本文介绍\(\rmOI\)中常见两种线性基:异或线性基和实数线性基。前置知识:线性空间先给出群的定义(\(\text{fromOI-wiki}\)):当一个集合关于某种运算封闭,满足结合律、单位......
  • 快速傅里叶变换及其实现
    第1章引言傅里叶变换(FourierTransform)是由数学家傅里叶提出的一套对函数进行变换的方法,其主要分为连续傅里叶变换(ContinuousFourierTransform,CFT)和离散傅里叶变换(Disc......