Shader入门精要总结(二)矩阵

1. 矩阵乘法

一个r×n的矩阵A和一个n×c的矩阵B相乘,它们的结果AB将会是一个r×c大小的矩阵,不满足此规则不能相乘
矩阵乘法满足一些性质

  • 矩阵乘法不满足交换律
    ABBA
  • 矩阵乘法满足结合律
    (AB)C=A(BC)

2. 特殊矩阵

  • 方块矩阵
    指行和列数目相等的矩阵,最常用的是3×3和4×4方阵,如果一个矩阵除了对角元素外的所有元素都为0,那么这个矩阵就叫对角矩阵

  • 单位矩阵
    一个特殊的对角矩阵是单位矩阵,一个3×3的单位矩阵如下
    在这里插入图片描述
    任何矩阵和单位矩阵相乘的结果都是原来的矩阵
    在这里插入图片描述

  • 转置矩阵
    给定一个r×c矩阵M,转置为 M T M^T MT,这是一个c×r的矩阵
    其有两个性质
    性质一:矩阵转置的转置等于原矩阵
    性质二:矩阵串接的转置,等于反向串接各个矩阵的转置,即
    ( A B ) T (AB)^T (AB)T= B T B^T BT A T A^T AT

  • 逆矩阵
    不是所有矩阵都有逆矩阵,前提是该矩阵必须是一个方阵
    满足 M M M M − 1 M^{-1} M1= M − 1 M M^{-1}M M1M= I I I
    其有四个性质
    性质一:逆矩阵的逆矩阵是原矩阵本身
    ( M − 1 ) − 1 = M (M^{-1})^{-1}=M (M1)1=M
    性质二:单位矩阵的逆矩阵是它本身
    I − 1 = I I^{-1}=I I1=I
    性质三:转置矩阵的逆矩阵是逆矩阵的转置
    ( M T ) − 1 (M^T)^{-1} (MT)1= ( M − 1 ) T (M^{-1})^T (M1)T
    性质四:矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵
    ( A B ) − 1 = B − 1 A − 1 (AB)^{-1}=B^{-1}A^{-1} (AB)1=B1A1

  • 正交矩阵
    如果一个方阵 M M M和它的转置矩阵的乘积是单位矩阵的话,这个矩阵就是正交的
    M M T = M T M = I MM^{T}=M^{T}M=I MMT=MTM=I
    如果一个矩阵是正交的,那么它的转置矩阵和逆矩阵是一样的
    M T = M − 1 M^{T}=M^{-1} MT=M1

3. 行矩阵还是列矩阵

在Unity中,常规做法是把矢量放在矩阵右侧,即把矢量转换成列矩阵来进行运算,这意味着,矩阵乘法通常是右乘
C B A v = ( C ( B ( A v ) ) ) CBAv=(C(B(Av))) CBAv=(C(B(Av)))
阅读顺序从右往左,上面等价于
v A T B T C T = ( ( ( v A T ) B T ) C T ) vA^{T}B^{T}C^{T}=(((vA^{T})B^{T})C^{T}) vATBTCT=(((vAT)BT)CT)

4. 矩阵变换

  • 变换
    线性变换指那些可以保留矢量加和标量乘的变换,即
    f ( x ) + f ( y ) = f ( x + y ) f(x)+f(y)=f(x+y) f(x)+f(y)=f(x+y)
    k f ( x ) = f ( k x ) kf(x)=f(kx) kf(x)=f(kx)
    缩放就是一种线性变换,旋转也是,对于线性变换来说,如果要对一个三维矢量进行变换,那么仅仅3x3的矩阵就可以表示所有线性变换,线性变换除了旋转和缩放,还包括错切,镜像,正交投影等
    平移变换不是一个线性变换,这样,就有了仿射变换,就是合并线性变换和平移变换的类型,仿射变换可以用一个4x4的矩阵表示,为此,需要把矢量扩展到四维空间下,这就是齐次坐标空间

  • 齐次坐标
    对于一个点,从三维坐标转换成齐次坐标是把其 w w w分量设为1,而对于方向矢量来说,需要把其 w w w分量设置为0
    我们把表示纯平移,纯旋转,纯缩放的的变换矩阵叫做基础变换矩阵,一个基础变换矩阵可以分解成4个部分:
    [ M 3 × 3 t 3 × 1 0 1 × 3 1 ] \begin{bmatrix} M_{3×3}& t_{3×1}\\ 0_{1×3}& 1\\ \end{bmatrix} [M3×301×3t3×11]
    左上角的矩阵 M 3 × 3 M_{3×3} M3×3用于表示旋转和缩放, t 3 × 1 t_{3×1} t3×1表示平移, 0 1 × 3 0_{1×3} 01×3是0矩阵,即
    [ 0 0 0 ] \begin{bmatrix} 0& 0& 0\\ \end{bmatrix} [000]
    右下角的元素就是标量1

  • 平移矩阵
    可以使用矩阵乘法来表示对一个点的平移变换
    在这里插入图片描述
    如果对一个方向矢量进行平移变化
    在这里插入图片描述
    可以发现,平移变化不会对方向矢量产生影响,即矢量没有位置属性,也就是说它可以位于空间中任意一点

  • 缩放矩阵
    对于一个点进行缩放
    在这里插入图片描述
    对于一个方向矢量
    在这里插入图片描述
    如果缩放系数 k x = k y = k z k_{x}=k_{y}=k_{z} kx=ky=kz,这样的缩放为统一缩放,否则为非统一缩放,从外观看,统一缩放是扩大整个模型,而非统一缩放会拉伸或挤压模型,更重要的是,统一缩放不会改变角度和比例信息,而非统一缩放会改变与模型相关的角度和比例,缩放矩阵一般不是正交矩阵

  • 旋转矩阵
    如果把点绕x轴旋转,可以使用下面的矩阵:
    在这里插入图片描述
    绕y轴旋转
    在这里插入图片描述
    绕z轴旋转
    在这里插入图片描述
    旋转矩阵是正交矩阵,而且多个旋转矩阵之间的串联同样是正交的

  • 复合变换
    在大多数情况下,约定矩阵的变换顺序是先缩放,再旋转,最后平移
    对于旋转来说,在Unity中,旋转的顺序是zxy

5. 坐标空间

  • 屏幕空间
    经过投影变换后,进行裁剪操作,当完成了所有裁剪工作后,就需要进行真正的投影了,也就是说需要把视椎体投影到屏幕空间
    首先,需要进行齐次除法,就是用齐次坐标系的 w w w分量去除 x y z xyz xyz分量,在OpenGL中,这一步得到的坐标叫做归一化的设备坐标(NDC),经过这一步后,可以把坐标从齐次裁剪坐标空间转换到NDC中,。经过透视投影变换后的裁剪空间。经过齐次除法后会变换到一个立方体内。按照OpenGL的传统,这个立方体的 x y z xyz xyz分量的范围都是[-1,1],但在DX中, z z z的分量范围会是[0,1]。Unity选择的是OpenGL的齐次裁剪空间
    在这里插入图片描述
  • 总结
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/391844.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城实战笔记-103~104-全文检索-ElasticSearch-Docker安装ES和Kibana

文章目录 一,103-全文检索-ElasticSearch-Docker安装ES1,下载镜像文件2,Elasticsearch安装3,验证 二,104-全文检索-ElasticSearch-Docker安装Kibana1,下载镜像文件2,kibana的安装3,验…

繁简之争:为什么手机芯片都是 ARM

RISC 和 CISC 指令集 之前的文章《揭秘 CPU 是如何执行计算机指令的》中说到,如果从软件的角度来讲,CPU 就是一个执行各种计算机指令(Instruction Code)的逻辑机器。 计算机指令集是计算机指令的集合,包括各种类型的…

【Android Studio】彻底卸载

文章目录 卸载程序控制面板卸载安全软件卸载 删除文件重启计算机 我们在Android开发时涉及重装时,如果卸载不干净,再次安装是不会正常运行项目的,接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>程序一>…

wxPython中wx.adv.DatePickerCtrl用法

wx.adv.DatePickerCtrl是一个日期选择组件,支持键盘手工录入日期和弹出日历窗口选择日期两种方式。 一、组件样式 wx.adv.DP_SPIN : 只允许键盘手工录入和组件右侧上下箭头调整日期。 wx.adv.DP_DROPDOWN : 只允许健盘手工录入和组件右侧打开…

一天攻克一个知识点 —— 设计模式之动态代理

一、设计模式之代理设计 代理设计是在Java开发中使用较多的一种设计模式,所谓的代理设计模式就是指一个代理主体操作真实主体,真实主体操作具体业务,代理主体负责给具体业务添砖加瓦。 就好比在生活中你有一套房子想要出租(你真实主体)&…

安卓控件RecyclerVieW

文章目录 导入依赖简单使用实现横向滚动瀑布式 RecyclerView是官方在5.0之后新添加的控件,推出用来替代ListView和GridView的列表控件。为了保证RecyclerView在所有Android系统版本上都能使用。Google将RecyclerView控件定义在了AndroidX中,只需要在项目…

完美平替navicat的数据库软件DBeaver,免费开源,功能强大,使用简单

DBeaver Community 是一个免费的跨平台数据库工具,适用于开发人员、数据库管理员、分析师和所有与数据打交道的人。它支持所有流行的 SQL 数据库,如 MySQL、MariaDB、PostgreSQL、SQLite、Apache Family 等 1.到官网下载win版本直接安装 https://dbeav…

苹芯科技发布新AI模型,引领全球轻量级AI应用革命

苹芯科技,一家在全球AI技术领域中不断创新的公司,于2月28日宣布推出其最新研发的轻量级AI模型。这款新模型旨在为开发者和企业提供更高效、更易访问的人工智能工具,尤其强调在数据敏感和计算资源受限的环境下的应用潜力。 在谷歌刚刚推出Gemm…

Python使用cProfile进行性能分析使用详解

概要 在Python开发中,代码性能分析是优化和调试的重要环节。通过性能分析,可以找出程序中性能瓶颈,进而进行优化。cProfile是Python内置的性能分析工具,它可以详细地分析代码的执行时间和函数调用情况。本文将详细介绍如何使用cProfile进行代码性能分析,涵盖安装、基本用…

代码随想录第29天|贪心

134.加油站 代码随想录 代码随想录 索引01234gas12345cost34512 计算每个加油站的剩余油量&#xff0c;累计sum&#xff0c;一旦<0就从下一个重新计数。 我还没理解为什么我们不需要计算环路的sum&#xff0c;而是只需要遍历一次。 因为使用了两个变量&#xff1a;curSu…

力扣-46.全排列

刷力扣热题–第二十六天:46.全排列 新手第二十六天 奋战敲代码&#xff0c;持之以恒&#xff0c;见证成长 1.题目简介 2.题目解答 这道题目想了会,思路比较好想,但一直没调试成功,所以就参考了力扣官网的代码,积累一下回溯算法的实现和基本实现思路,即先试探后回溯,结果在下面…

加密软件通常使用哪些算法

加密软件通常使用多种算法来确保数据的安全性&#xff0c;这些算法主要分为对称加密算法、非对称加密算法和哈希算法三大类。 一、对称加密算法 对称加密算法&#xff0c;也称为共享密钥加密算法&#xff0c;是加密和解密都使用相同密钥的算法。这类算法的特点是加密和解密速…

24/8/4算法笔记 梯度下降

通过迭代地调整参数&#xff0c;沿着目标函数梯度的反方向&#xff08;即最陡峭的下降方向&#xff09;进行搜索&#xff0c;从而找到函数的局部最小值。 导入库 import matplotlib.pyplot as plt import numpy as np 构建方程和导数 #构建方程 f lambda x:(x-3.5)**2-4.…

使用Docker+ollama部署大模型

Docker的安装----在 Ubuntu 系统上安装 Docker 一&#xff1a;配置系统的 APT 软件包管理器 首先添加 Docker 的官方 GPG 密钥 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/ke…

RabbitMQ未授权访问漏洞

RabbitMQ是目前非常热门的一款消息中间件&#xff0c;基于AMQP协议的&#xff0c;可以在发布者和使用者之间交换异步消息。消息可以是人类可读的JSON&#xff0c;简单字符串或可以转换为JSON字符串的值列表。 漏洞复现 使用以下Fofa语法对RabbitMQ产品进行搜索 port"15…

OpenCSG首发中文Chinese Mistral Large 2!

前沿科技速递&#x1f680; &#x1f389; 震撼发布&#xff01;OpenCSG再次微调发布CSG-Wukong-Chinese-Mistral-Large2-123B模型&#xff01; &#x1f50d; 本次工作基于mistral-large-instruct-2407进行微调&#xff0c;采用了尖端的训练技术和优化策略&#xff0c;确保模型…

Vulnhub靶机:JANGOW_ 1.0.1

目录 前言&#xff1a; 一、安装虚拟机Jangow&#xff1a;1.0.1靶机 二、Web部分 前言&#xff1a; 难度&#xff1a;简单&#xff0c;本文使用VirtualBox打开&#xff0c;下载地址&#xff1a; https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 一、安装虚拟机J…

数据结构与算法 - 二叉树

1. 概述 二叉树是这么一种树状结构&#xff1a;每个节点最多有两个孩子&#xff0c;左孩子和右孩子 完全二叉树&#xff1a;是一种二叉树结构&#xff0c;除了最后一层以外&#xff0c;每一层都必须填满&#xff0c;填充时要遵循从左到右 平衡二叉树&#xff1a;是一种二叉树…

Pip 使用报错及解决

pip install 是Python 包管理器命令&#xff0c;常用参数&#xff1a; -r&#xff1a;从一个需求文件中安装所有的包。-U 或 --upgrade&#xff1a;升级一个已经安装的包到最新版本。-I 或 --ignore-installed&#xff1a;即使包已经安装&#xff0c;也重新安装。--no-cache-d…

要想赚钱,AI模型该大该小?贾扬清:论AI模型经济学的技巧

卖模型就像感恩节卖火鸡&#xff0c;快才能赚钱。 最近的AI社区&#xff0c;关于模型规模的讨论有些活跃。 一方面&#xff0c;此前在大模型开发奉为“圣经”的Scaling Law&#xff0c;似乎正在褪去光环。去年大家还在猜测GPT-5的规模“可能会大到想不到”&#xff0c;现在这…