首页 > 其他分享 >Unity Shader学习日记 part 3 线性代数--矩阵变换

Unity Shader学习日记 part 3 线性代数--矩阵变换

时间:2024-12-22 13:28:05浏览次数:6  
标签:平移 缩放 -- 矩阵 Shader 正交 变换 Unity 向量

        之前我们学到了矩阵的相关基础,了解矩阵使用了进行变幻的。可是在三维空间中我们不管是表示点还是向量,都是通过x,y,z来表示的。那我们如何在三维向量中,表示出来变换的呢?

齐次坐标

        齐次坐标:将原本的n维向量用n+1维来表示。

        原因:1.不论是点还是向量,都是三维坐标,无法区分,我们给他在加上1维做区分。(x,y,z,w)w为0,向量,为1,点

                   2.三维向量无法表示平移变换,只能进行旋转,缩放的线性变换。

既然提到了变换,那就来看看这些变换矩阵是什么样的。、

在此之前,我们先来看看基础变换矩阵的构成

基础变换矩阵

在4*4的矩阵中,分成了四个部分,右边的[t1,t2,t3]是用于平移变换,而m区域的3*3矩阵则是用于旋转和缩放变换,其他的两个部分,0和1都是写死的。不论是何种变换,都是在基础变换矩阵转换来的,接下来我们在看看他们。

平移矩阵 

        

如图就是平移矩阵了,将m区域的3*3矩阵变为单位矩阵,就可以得到平移矩阵,通过修改右侧的tx,ty,tz来完成变换。 

平移矩阵的计算

        了解了平移矩阵,来看看怎么使用

如图,就是将点 x,y,z进行了平移变换后的位置

这个则是向量通过平移矩阵之后的样子,现在我们可以看到,为什么需要使用4*4的矩阵来进行变换,以及为什么需要给列向量加1维。

        那为什么向量变换之后,还是原本的样子呢?

        这是因为,向量表示的是大小与方向,而不是位置,不论如何变换,向量的大小与方向是不变的。

平移矩阵是否是正交矩阵

        为什么需要在意是不是正交矩阵呢?这里的正交矩阵,我们主要是想要快速的得到它的逆矩阵,这一点我们之前提过为什么。

        而得到逆矩阵之后,我们可以通过逆矩阵进行反向变换。

        那么如何判断是否是正交矩阵,之前也提过,我们再来看看

显然,平移矩阵不是正交矩阵,不过虽然他不是正交矩阵,我们也可以通过计算得到,结果也简单,记一下就好

        

旋转矩阵

        旋转矩阵比较复杂,如何推导就不说了,记住就行

 旋转矩阵是否是正交矩阵

        结论:旋转矩阵是正交矩阵,意味着旋转矩阵得转置矩阵就是它得逆矩阵。

缩放矩阵

        缩放矩阵就是对点或者向量进行某一个方向上得放大缩小。他的构成也非常简单

需要注意得是:缩放对于点或者向量都是有意义的。

  缩放矩阵是否是正交矩阵

        通常来说,缩放矩阵不会是正交矩阵,因为kx,ky,kz需要为1的时候才能使正交矩阵,所以通常来说,不是。

        不过,他的逆矩阵也非常简单

        

复合运算

        由于矩阵的乘法是不满足交换律,所以变换的顺序很重要。

        举个列子,先往前一步,再向左左转。和先向左转,再往前一步的结果是不一样的。

Unity 的规则

        在进行符合运算是,遵循先缩放,再旋转,最后平移。

        如果是旋转,先z轴,再x轴,最后y轴。

以上就是基本的变换矩阵相关的基础了

标签:平移,缩放,--,矩阵,Shader,正交,变换,Unity,向量
From: https://blog.csdn.net/weixin_70808146/article/details/144644400

相关文章

  • Python 写的《桌面时钟》屏保
    原代码:#日历式时钟#导入所需的库#作者:Hoye#日期:2024年12月16日#功能:显示当前日期、星期、时间,并显示模拟时钟importtkinterastkfromtkinterimportttkimporttimeimportmathimportsysdefexit_screensaver(event=None):root.quit()defdraw_cl......
  • 安装MongoDB,环境配置
    官网下载地址:MongoDBShellDownload|MongoDB选择版本安装下载完成双击打开点击mongodb-windows-x86_64-8.0.0-signed选择安装地址检查安装地址安装成功二.配置MongoDB数据库环境1.找到安装好MongoDB的bin路径复制bin路径打开此电脑->打开高级系统设置->......
  • 瓦斯浓度预测 | 基于CNN-BiLSTM-ATTENTION瓦斯浓度预测附matlab代码
    预测效果研究概述瓦斯浓度预测|基于CNN-BiLSTM-ATTENTION瓦斯浓度预测附matlab代码基于CNN-BiLSTM-ATTENTION的瓦斯浓度预测是一种先进的预测方法。以下是对该方法的详细分析:基于CNN-BiLSTM-Attention的瓦斯浓度预测是一种先进的预测方法,结合了卷积神经网络(CNN)、双......
  • ios系统漏洞
    以下是一些常见的iOS系统漏洞:隐私安全类漏洞CVE-2024-44131漏洞:存在于文件提供组件中,可能绕过TCC框架,使攻击者在用户不知情时,访问文件、健康数据、麦克风、摄像头等敏感信息。攻击者可通过操纵符号链接,在用户使用Files.app移动或复制文件时,插入恶意符号链接,绕过检查......
  • 大三Web课程设计(可以很好的应付老师的作业) 家乡主题网页设计 我的家乡广州 (2)
    家乡旅游景点网页作业制作网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有运用,CSS的代码量也很足、很细致,使用hover来完成过渡效果、鼠......
  • 校门外的树(一维差分)
    题目:链接:https://ac.nowcoder.com/acm/problem/16649题意:给出m片区域,将这m片区域的树砍掉,问0~l上还有多少棵树思路:差分一维差分:构造一个初始元素都为0的dif数组,长度为[0,n]如果在i~j上+k,那么令dif[i]+k,dif[j+1]-k进行若干次操作后,进行前缀和.(再加到原数组上,得到结果)......
  • NUMA的取舍与优化设置
     NUMA的取舍与优化设置   在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30%;  在bios层面numa关闭时,无论os层面的numa是否打开,都不会影响性能。       安装numactl:       #yuminstallnumactl-y     #numastat      等同于......
  • 程序员修炼之道从小工到专家第八章读书笔记
    注重实效的团队团队文化的重要性:一个注重实效的团队不仅仅是个人能力的集合,而是通过共同的目标、价值观和方法论来驱动。团队成员需要对项目有清晰的理解,并且愿意为共同的成功而努力。协作与分工:团队中的每个成员都有自己的角色,但成功的项目需要良好的协作和明确的分工。避免“......
  • Kubernetes 的 Reflector 工具使用
    最近遇到一个问题,需要在k8s集群里面,跨命名空间来进行组件之间的ssl认证。当前的k8s环境使用cert-manager工具来进行自动化证书管理。首先介绍一下cert-manager的工作原理,它利用了Kubernetes的自定义资源定义(CRD)机制。主要的自定义资源包括Certificate、Issuer和ClusterIssuer......
  • offset explorer如何安装?附获取方式
    前言大家好,我是小徐啊。我们在Java开发的时候,有时候需要进行大数据的开发,或者需要使用消息队列,这个时候,就需要用到kafka这个组件了。而对于我们平常运维来说,最好有一个可视化的连接kafka的工具。今天小徐就来介绍一款连接Kafka的工具,是offsetexplorer,介绍下windows下如何安装。......