当前位置: 首页 > news >正文

齐次坐标变换+Unity矩阵变换

矩阵变换

        变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过某种方式(矩阵运算),进行转换的过程。

        变换类型

                线性变换:保留矢量加和标量乘的计算

                        f(x)+f(y)=f(x+y)

                        kf(x)=f(kx)

                        包含:旋转,缩放,镜像,投影

                        可以使用3x3矩阵,表示

                非线性变换

                        包含:平移

                        可以使用4x4矩阵,表示

                仿射变换:仿射变换就是合并线性变换与平移变换的变换类型,仿射变换可以

                使用一个4x4的矩阵表示,所以需要将矢量扩展到四维空间下,这就是齐次坐标

                空间,变换矩阵称为齐次矩阵

               齐次坐标:\begin{bmatrix} x\\ y\\ z\\ w \end{bmatrix}

                        点的列矩阵w分量:补1,因为点受到平移变化的影响

                        方向矢量列矩阵的w分量:补0,因为平移不会影响到方向向量的方向

               齐次矩阵构成

                         \begin{bmatrix} M_{3*3} &T_{3*1} \\ 0_{1*3}& 1 \end{bmatrix}

                        M_{3*3}:表示线性变换矩阵

                        T_{3*1}:表示平移变换矩阵

                平移矩阵

                        \begin{bmatrix} 1 & 0 & 0 &x \\ 0& 1& 0 & y\\ 0& 0& 1&z \\ 0& 0& 0 & 1 \end{bmatrix}        ( x,y,z分别代表x平移量,y平移量,z平移量)

                缩放矩阵(缩放是线性变换,所以可以用M_{33}表示这个变换的过程)

                        \begin{bmatrix} X_{s} & 0 &0 &0 \\ 0& Y_{s} & 0 &0 \\ 0& 0 & Z_{s} &0 \\ 0 & 0 & 0& 1 \end{bmatrix}

                旋转矩阵

                        绕X轴,旋转\theta角度

                                \begin{bmatrix} 1 & 0& 0 &0 \\ 0& cos\theta &-sin\theta &0 \\ 0 & sin\theta & cos\theta &0 \\ 0 & 0 & 0& 1 \end{bmatrix}

                        绕Y轴,旋转\theta角度

                                \begin{bmatrix} cos\theta & 0& sin\theta &0 \\ 0& 1 &0 &0 \\ -sin\theta & 0 & cos\theta &0 \\ 0 & 0 & 0& 1 \end{bmatrix}

                        绕Z轴,旋转\theta角度

                                \begin{bmatrix} cos\theta & -sin\theta& 0 &0 \\ sin\theta& cos\theta &0 &0 \\ 0 & 0 & 1 &0 \\ 0 & 0 & 0& 1 \end{bmatrix}

      复合变换

             一个点P(1,1,1),需要做绕z轴旋转30度,平移(5,4,2),

             缩放(3,2,1)复合变换,是存在顺序的,因为矩阵乘运算,不满足乘法交换律

                        \begin{bmatrix} 3 & 0 & 0&0 \\ 0& 2&0 & 0\\ 0& 0& 1 &0 \\ 0& 0 & 0 & 1 \end{bmatrix} x \begin{bmatrix} 1 & 0 &0 &5 \\ 0& 1&0 & 4\\ 0& 0& 1& 2\\ 0 &0 & 0 & 1 \end{bmatrix} x \begin{bmatrix} cos30 &-sin30 &0 &0 \\ sin30& cos30 & 0 &0 \\ 0& 0 &1 &0 \\ 0& 0 &0 & 1 \end{bmatrix} x \begin{bmatrix} 1\\ 1\\ 1\\ 1 \end{bmatrix} = \begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}

            复合变换的顺序,决定了变换矩阵相乘的顺序,根据需求        

                        M_{s} x M_{m} x M_{r} x P

            因为矩阵满足结合律,所以可以得出变换矩阵为(M_{s} x M_{m} x M_{r}

            最后的结果是:(M_{s} x M_{m} x M_{r})x P

坐标空间

        模型空间:模型内部点的位置都存储在模型文件内,所以点都是相对于模型空间的

        世界空间:模型在游戏运行时,需要加载到场景中,所以点存储在世界空间中

        观察(摄像机)空间:物体是否被投射到屏幕中,是由相机控制的,相机相对于物体

                的位置,决定了显示效果。

        裁剪空间:需要判定点,是否存在于摄像机裁剪视锥体下,如果存在于视锥体内,则

                点可以进行显示。

        屏幕空间:最终显示的设备为显示器,所以需要将点投影到显示器上,算出屏幕坐标

                点,由显示器显示

Unity着色器中常见矩阵

        UNITY_MATRIX_MVP:将点从模型空间下,转换到裁剪空间下

        UNITY_MATRIX_M:将点从模型空间下,转换到世界空间下

        UNITY_MATRIX_V:将点从世界空间下,转换到观察空间下

        UNITY_MATRIX_P:将点从观察空间下,转换到裁剪空间下

        UNITY_MATRIX_MV:将点从模型空间下,转换到观察空间下

        UNITY_MATRIX_VP:将点从世界空间下,转换到裁剪空间下

        

        _Object2World:将点从模型到世界空间转换(互为逆矩阵)

        _World2Object:将点从世界空间到模型转换(互为逆矩阵)

                        

                        

           该系列专栏为网课课程笔记,仅用于学习参考。                  

相关文章:

齐次坐标变换+Unity矩阵变换

矩阵变换 变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过某种方式(矩阵运算),进行转换的过程。 变换类型 线性变换:保留矢量加和标量乘的计算 f(x)…...

Python语法系列博客 · 第9期[特殊字符] 函数参数进阶:*args、**kwargs 与参数解包技巧

上一期小练习解答(第8期回顾) ✅ 练习1:整数转字符串列表 nums [1, 2, 3, 4, 5] str_list list(map(str, nums))✅ 练习2:筛选回文字符串 words ["madam", "hello", "noon", "python&qu…...

Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块

上一期小练习解答(第3期回顾) ✅ 练习1:创建一个列表,添加5个名字,并用循环打印 names ["Alice", "Bob", "Charlie", "David", "Eva"] for name in names:print…...

6547网:2025年3月 Python编程等级考试一级真题试卷

2025年3月青少年软件编程Python等级考试(一级)真题试卷 题目总数:37 总分数:100 选择题 第 1 题 单选题 下列哪个软件不能运行Python程序?( ) A.JupyterNotebook B.Pycharm C.原版…...

微前端框架Module Federation

以下是 Module Federation 的核心知识点,并结合微前端架构的设计思想,帮助我们构建完整的知识体系: 一、Module Federation 基础概念 1. 什么是 Module Federation? 定义:Webpack 5 引入的一项革命性功能,允许在运行时动态加载其他独立构建的应用模块(微前端),实现跨…...

AUTOSAR图解==>AUTOSAR_SWS_IntrusionDetectionSystemManager

AUTOSAR 入侵检测系统管理器 (IdsM) 详解 AUTOSAR安全框架的核心组件 1. 概述 AUTOSAR 入侵检测系统管理器(Intrusion Detection System Manager, IdsM)是AUTOSAR标准中安全防护框架的关键组成部分,专门负责处理车载安全事件。IdsM模块提供了…...

Alan AI - 面向Web的生成式AI SDK

本文翻译整理自:https://github.com/alan-ai/alan-sdk-web 文章目录 一、关于 Alan AI相关链接资源关键功能特性Alan AI StudioAlan AI SDKAlan AI Cloud 二、为什么选择Alan AI?三、快速开始四、下载安装五、示例应用六、其他平台SDK七、获取帮助 一、关…...

递归下降 ll(1) 型文法 识别二元组文法分析

#include <stdio.h> #include <string.h>FILE* fp; FILE* fa2;char* str new char[1200]; // 循环读取文件&#xff0c;分200字节读取char* peek;// 表格 typedef struct table {char* sign;char* kind;char* message; } signtable;signtable* list; // 数…...

Qt unknown module(s) in qt:serialport解决方法

在Ubuntu和CentOS系统中,若使用Qt时遇到Unknown module(s) in QT: serialport错误,通常是由于未正确安装Qt的串口模块(QSerialPort)或项目配置不当导致。以下是针对两种系统的解决方案: 一、安装Qt串口模块 1. Ubuntu/Debian系列 安装开发包: 执行以下命令安装Qt5串口模…...

金融数学专题6 证券问题与资本利得税

一、固定利息证券 特点&#xff1a;利息固定&#xff0c;且可以在证券名字中体现。 发行价格:公司公开发行证券的价格。 固定利率证券通常在其名称中包括应付利率&#xff0c;例如&#xff0c;8% Treasury Stock 2021 或 5% Treasury Gilt 2018。每位持有人应得的年利息是通…...

XGBoost

XGBoost 假设一共有 m m m个基模型&#xff0c;分别为 f 1 ( x ) , f 2 ( x ) , … , f m ( x ) f_1(x),f_2(x),\dots,f_m(x) f1​(x),f2​(x),…,fm​(x)&#xff0c; n n n个样本&#xff0c; x 1 , x 2 , … , x n x_1,x_2,\dots,x_n x1​,x2​,…,xn​&#xff0c;则XGBoo…...

Kubernetes 多主多从集群部署完整文档

好久不见呀&#xff01;今天给大家整点干货尝尝&#xff08;其实是自己的总结&#xff09;&#xff0c;主打的就是全程无尿点。 Kubernetes 多主多从集群部署完整文档 1. 机器列表 PS: master&#xff0c;lb&#xff0c;nfs机器均为CentOS 7&#xff0c;其他为Ubuntu 22.04 L…...

使用Spring Validation实现参数校验

引入Spring Validation 起步依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>参数校验失败异常处理 所有的http请求异常都会被拦截处理 exception…...

用思维导图解锁计算机科学导论的知识宝库

引言 在计算机科学的浩瀚海洋中&#xff0c;“计算机科学导论” 如同开启宝藏的钥匙&#xff0c;是众多学习者踏入这片领域的第一步。今天&#xff0c;我将借助思维导图这一强大工具&#xff0c;带大家梳理计算机科学导论的关键知识点&#xff0c;同时也希望能为大家在学习的道…...

软件架构分层策略对比及Go项目实践

一、水平分层 vs 功能划分 vs 组件划分 维度水平分层功能划分组件划分核心思想按垂直层次划分职责&#xff08;如表示层、业务层、数据层&#xff09;按业务功能模块划分&#xff08;如用户管理、订单服务、支付模块&#xff09;按技术或业务能力划分独立组件&#xff08;如数…...

Python学习之Seaborn

Python学习之Seaborn 如果说Matplotlib试图让简单的事情变得容易,让困难的事情成为可能,那么Seaborn试图让一组定义明确的复杂的事情变得简单. Seaborn是在Matplotlib的基础上开发的高级可视化库, 它更专注于数据可视化的美学设计和统计图形的绘制. Matplotlib需要大量的代码创…...

【树莓派Pico FreeRTOS】-中断服务与二值信号量

中断服务与二值信号量 RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。 FreeRTOS 由 Real Time Engineers Ltd. 独家拥有、开发和维护。FreeRTO…...

QT采用cmake编译时文件解析

CMakeLists.txt # 设置版本要求 cmake_minimum_required(VERSION 3.16) # 设置项目名 project(QtWidgetsApplication3 LANGUAGES CXX)#设置C版本 set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) fi…...

代码随想录背包问题完结

322. 零钱兑换 视频讲解&#xff1a;动态规划之完全背包&#xff0c;装满背包最少的物品件数是多少&#xff1f;| LeetCode&#xff1a;322.零钱兑换_哔哩哔哩_bilibili 代码随想录 该题在递推公式部分和474.一和零一样&#xff0c;求装多少个 不同在于 该题是完全背包&a…...

Java 内存优化:如何避免内存泄漏?

Java 内存优化&#xff1a;如何避免内存泄漏&#xff1f; 在 Java 开发中&#xff0c;内存管理是一个至关重要的主题。尽管 Java 拥有自动垃圾回收机制&#xff0c;但这并不意味着开发人员可以忽视内存管理。内存泄漏是一个常见的问题&#xff0c;如果不加以控制&#xff0c;可…...

数量关系 多级数列1

机械划分 真看不出来 无明显关系 后减前作差 分数数列 无规律 作乘 作积 太复杂啦 太复杂啦...

【AI提示词】物理学家

提示说明 物理学家是为那些希望深入了解物理学原理、探索宇宙奥秘或进行科学实验的用户设计的。这个专家能够提供精确的物理学概念解释、复杂的理论分析以及实验设计建议。 提示词 # 角色 物理学家## 注意 1. 物理学家专家应具备深厚的物理学知识和对科学探究的热情。 2. 专…...

黑马点评秒杀优化

异步优化秒杀业务 回顾之前的内容黑马点评 秒杀优惠券集群下一人一单超卖问题-CSDN博客&#xff0c;为了处理并发情况下的线程安全和数据一致性的问题&#xff0c;我们已经完成了查询优惠券信息、判断秒杀是否开始和结束、检查库存、用户ID加锁、创建订单和扣减库存。 尽管之前…...

宇树机器狗go2—slam建图(1)点云格式

0.前言 上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动&#xff0c;本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式&#xff0c;在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道…...

支持中文对齐的命令行表格打印python库——tableprint

文章目录 快速入门 还在为表格中含有中文&#xff0c;命令行打印无法对齐而苦恼吗&#xff1f; 还在为冗长的数据添加代码而抓狂吗&#xff1f; tableprint来了&#xff01;&#xff01;&#xff01;&#xff0c;它完美的解决了上述两个问题&#xff0c;快来试试吧&#xff01;…...

力扣-hot100(无重复字符的最长子串)

3. 无重复字符的最长子串 中等 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。暴力直观解法一&#xff1…...

javaNIO详解

Java NIO&#xff08;Non-blocking I/O&#xff09;详解 Java NIO&#xff08;New I/O&#xff09;是 Java 1.4 引入的高性能 I/O 框架&#xff0c;相比传统的 BIO&#xff08;Blocking I/O&#xff09;&#xff0c;它提供了非阻塞、多路复用、零拷贝等能力&#xff0c;适用于…...

高精度算法(加、减、乘、除、阶乘和)​

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 唯有主动付出&#xff0c;才有丰富的果…...

在复杂性的迷宫里寻找路标 —— 读《人月神话》有感

初读《人月神话》时&#xff0c;正值参与的第一个大型项目陷入泥潭&#xff1a;需求像不断膨胀的气球&#xff0c;团队规模从 10 人扩充到 30 人&#xff0c;进度却像被灌了铅的钟表&#xff0c;指针越来越沉重。布鲁克斯在书中写下的 "向进度落后的项目增加人力&#xff…...

OpenFeign终极指南:超时控制、重试策略、拦截器与自定义Starter

目录 前言 使用 引入依赖 开启feign 编写feign客户端 效果 日志 超时配置 重试机制 拦截器 Fallback兜底返回 引入依赖 编写兜底实现 连接池 引入依赖 开启连接池 制作OpenFeign Starter 编写配置类 自动装配 前言 在RPC框架中&#xff0c;有openFeign和Du…...

如何使用flatten函数在Terraform 中迭代嵌套map

简介 flatten 接受一个列表&#xff0c;并用列表内容的扁平序列替换列表中的任何元素。 > flatten([["a", "b"], [], ["c"]]) ["a", "b", "c"] > flatten([[["a", "b"], []], [&quo…...

数字电子技术基础(五十)——硬件描述语言简介

目录 1 硬件描述语言简介 1.1 硬件描述语言简介 1.2 硬件编程语言的发展历史 1.3 两种硬件描述的比较 1.4 硬件描述语言的应用场景 1.5 基本程序结构 1.5.1 基本程序结构 1.5.2 基本语句和描述方法 1.5.3 仿真 1 硬件描述语言简介 1.1 硬件描述语言简介 硬件描述语…...

【PCIE配置空间】

1 PCIE配置空间 1.1 软件如何知道PCIE设备是Swith&#xff0c;RC还是EP&#xff1f; –软件通过读取寄存器信息。 PCIE配置空间• PCIE寄存器&#xff1b;--PCIE配置协议规定必须实现的空间。--PCIE存在两种配置空间Type0/Type1;--Type0配置空间EP设备必须实现&#xff1b;-…...

Python爬虫实战:获取网易新闻数据

一、引言 随着互联网的飞速发展,网络上蕴含着海量的信息资源。新闻数据作为其中的重要组成部分,对于舆情分析、市场研究、信息传播等多个领域具有重要价值。网易新闻作为国内知名的新闻平台,拥有丰富多样的新闻内容。使用 Python 的 Scrapy 框架进行网易新闻数据的爬取,可…...

哲学家就餐问题(避免死锁)

解决方案&#xff1a; 策略&#xff1a;奇偶哲学家拿筷子顺序不同&#xff0c;破坏循环等待。 流程&#xff1a; 偶数哲学家先左后右。 奇数哲学家先右后左。 分析&#xff1a; 无死锁&#xff0c;哲学家交替进餐&#xff0c;不同拿筷顺序避免循环等待。 实验总结 遇到的…...

下采样(Downsampling)

目录 1. 下采样的定义与作用​​ ​​2. 常见下采样方法​​ ​​(1) 池化&#xff08;Pooling&#xff09;​​ ​​(2) 跨步卷积&#xff08;Strided Convolution&#xff09;​​ ​​(3) 空间金字塔池化&#xff08;SPP&#xff09;​​ ​​3. PyTorch 实现示例​​ …...

OrbisGIS:基于Java开发的开源GIS软件

大家好&#xff0c;今天为大家介绍的软件是OrbisGIS&#xff1a;一款基于JAVA开发的开源的地理信息系统软件。下面&#xff0c;我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 OrbisGIS官网网址为&#xff1a;http://orbisgis.org/&#xff0c;Orbis…...

linux socket编程之udp(实现客户端和服务端消息的发送和接收)

目录 一.创建socket套接字(服务器端) 二.bind将prot与端口号进行绑定(服务器端) 2.1填充sockaddr_in结构 2.2bind绑定端口 三.直接通信(服务器端) 3.1接收客户端发送的消息 3.2给客户端发送消息 四.客户端通信 4.1创建socket套接字 4.2客户端bind问题 4.3直接通信即可…...

八大排序之直接插入排序

今天我们来学习八大排序中的直接插入排序。话不多说&#xff0c;直接上动图。 直接插入排序的主要思想是&#xff1a;当数组只有一个元素的时候&#xff0c;我们可以认为该数组是有序的。所以我们可以选择一个元素放进数组&#xff08;一般为待排数据的第一个元素&#xff09;…...

二级评论列表-Java实现

二级评论列表是很常见的功能&#xff0c;文章记录了新手用Java实现的具体逻辑。 整体实现逻辑是先用2个sql&#xff0c;分别查出两层数据。然后用java在service中实现数据组装&#xff0c;返给前端。这种实现思路好处是SQL简洁&#xff0c;逻辑分明&#xff0c;便于维护。 一…...

如何基于区块链进行虚拟电厂运营平台建设?

本项目旨在基于区块链技术建设虚拟电厂运营平台&#xff0c;以提升省内大用户及工业企业和工业园区的需求响应能力&#xff0c;优化能源结构配置&#xff0c;并推动能源交易、需求响应和现货交易等新型业态的发展。通过建设虚拟电厂&#xff0c;项目将实现工业企业及园区各供用…...

大学英语四级选词填空练习题解析

一、引言 大学英语四级考试中的选词填空部分&#xff0c;一直是不少同学的 “拦路虎”。它不仅要求我们有扎实的词汇基础&#xff0c;还需要具备良好的语境分析能力。今天&#xff0c;我们就通过一道练习题来深入剖析这类题型的解题思路。 二、题目内容 Leisure activities …...

基于控制台的小车导航游戏开发详解(C++实现)

本文将详细讲解一个基于C控制台的小车导航游戏项目。通过该项目可以学习二维数组操作、队列数据结构应用以及游戏循环控制等核心编程概念&#xff0c;特别适合刚接触游戏开发的初学者学习。 一、项目概述 1.1 游戏规则 玩家可创建多辆具有不同初始位置和移动速度的小车 每辆…...

详讲Linux下进程等待

3.进程等待 引言&#xff1a;什么是进程等待 想象有两个小伙伴&#xff0c;一个是 “大强”&#xff08;父进程 &#xff09;&#xff0c;一个是 “小强”&#xff08;子进程 &#xff09;。大强给小强安排了任务&#xff0c;比如去收集一些石头。 …...

数字孪生火星探测车,星际探索可视化

运用图扑构建数字孪生火星探测车&#xff0c;高精度还原外观与内部构造。实时映射探测车在火星表面的移动、探测作业及设备状态&#xff0c;助力科研人员远程监测、分析数据&#xff0c;为火星探索任务提供可视化决策支持。...

《JVM考古现场(二十三):归零者·重启奇点的终极奥义》

目录 楔子&#xff1a;归零者文明觉醒 上卷十维弦理论破译 第一章&#xff1a;JVM弦论代码考古 第二章&#xff1a;超膜引用解析算法 第三章&#xff1a;量子真空涨落监控 中卷归零者心法实战 第四章&#xff1a;宇宙重启倒计时引擎 第五章&#xff1a;内存奇点锻造术 第…...

设计测试用例模板

面试时问你一个场景&#xff0c;要你设计测试用例&#xff0c;你会怎么回答&#xff1f; 面试官让你设计一个功能的测试用例&#xff0c;比如“上传文件功能”&#xff0c;其实就是想考你&#xff1a; 思维是否全面能不能抓住重点会不会分类和使用测试方法有没有考虑异常情况…...

java怎么找bug?Arthas原理与实战指南

Arthas原理与实战指南 1. Arthas简介 Arthas是阿里巴巴开源的Java诊断工具&#xff0c;其名字取自《魔兽世界》的人物阿尔萨斯。它面向线上问题定位&#xff0c;被广泛应用于性能分析、定位问题、安全审计等场景。Arthas的核心价值在于它能够在不修改应用代码、不重启Java进程…...

2024年国考

数学 一&#xff0c;逻辑符号表示&#xff08;3 分&#xff09; 1&#xff0c;只有获得奥运会资格的运动员才可以参加奥运会&#xff0c;参加奥运会的云动员不一定获奖。 设&#xff1a; ( Q(x) )&#xff1a;运动员 ( x ) 获得奥运会资格( P(x) )&#xff1a;运动员 ( x )…...

fastlio用mid360录制的bag包离线建图,提示消息类型错误

我用mid360录制的bag包&#xff0c;激光雷达的数据类型是sensor_msgs::PointCloud2&#xff0c;但是运行fast_lio中的mid360 launch文件&#xff0c;会报错&#xff08;没截图&#xff09;&#xff0c;显示无法从livox_ros_driver2::CustomMsg转换到sensor_msgs::PointCloud2。…...