GAMES101 笔记 Lecture 04 Transformation Cont.

news2024/11/25 20:44:55

目录

      • 3D Transformations(三维变换)
      • Viewing transformation(观测变换)
        • View/Camera Transformation(视图变换)
          • What is view transformation(什么是视图变换)?
          • How to perform view transformation?(如何进行视图变换呢?)
        • Projection Transformation(投影变换)
          • Orthographic Projection(正交投影)
            • 变换矩阵
          • Perspective Projection(透视投影)
      • 参考资源

3D Transformations(三维变换)

延续上节课的内容:
使用齐次坐标进行表示三维的点或者向量:

  • 3D point = ( x , y , z ) T (x,y , z)^T (x,y,z)T
  • 3D vector = ( x , y , z ) T (x, y, z)^T (x,y,z)T

新的内容:
在三维空间中,分别绕 x x x y y y, z z z轴旋转操作:
在这里插入图片描述
R x ( α ) = ( 1 0 0 0 0 cos ⁡ α − sin ⁡ α 0 0 sin ⁡ α cos ⁡ α 0 0 0 0 1 ) \mathbf{R}_{x}(\alpha)=\left(\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & \cos \alpha & -\sin \alpha & 0 \\ 0 & \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) Rx(α)= 10000cosαsinα00sinαcosα00001

R y ( α ) = ( cos ⁡ α 0 sin ⁡ α 0 0 1 0 0 − sin ⁡ α 0 cos ⁡ α 0 0 0 0 1 ) \mathbf{R}_{y}(\alpha)=\left(\begin{array}{cccc} \cos \alpha & 0 & \sin \alpha & 0 \\ 0 & 1 &0 & 0 \\ -\sin \alpha & 0 & \cos \alpha & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) Ry(α)= cosα0sinα00100sinα0cosα00001

R z ( α ) = ( cos ⁡ α − sin ⁡ α 0 0 sin ⁡ α cos ⁡ α 0 0 0 sin ⁡ α 1 0 0 0 0 1 ) \mathbf{R}_{z}(\alpha)=\left(\begin{array}{cccc} \cos \alpha & -\sin \alpha & 0 & 0 \\ \sin \alpha & \cos \alpha & 0 & 0 \\ 0 & \sin \alpha & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) Rz(α)= cosαsinα00sinαcosαsinα000100001

任意的三维的旋转都可以写成分别绕 x x x轴,绕 y y y轴,绕 z z z轴的组合:
R x y z ( α , β , γ ) = R x ( α ) R y ( β ) R z ( γ ) \mathbf{R}_{xyz}(\alpha, \beta, \gamma) = \mathbf{R}_{x}(\alpha)\mathbf{R}_{y}(\beta)\mathbf{R}_{z}(\gamma) Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)

这三个角又被称为欧拉角(Euler angles)。
常用于飞行模拟器:滚转,俯仰,偏航。
在这里插入图片描述
罗德里格旋转公式(Rodrigues’ Rotation Formula):

绕旋转轴 n ⃗ \vec{n} n 旋转角度 α \alpha α,默认轴的起点在原点上。

R ( n , α ) = cos ⁡ ( α ) I + ( 1 − cos ⁡ ( α ) ) n n T + sin ⁡ ( α ) ( 0 − n z n y n z 0 − n x − n y n x 0 ) ⏟ N \mathbf{R}(\mathbf{n}, \alpha)=\cos (\alpha) \mathbf{I}+(1-\cos (\alpha)) \mathbf{n} \mathbf{n}^{T}+\sin (\alpha) \underbrace{\left(\begin{array}{ccc} 0 & -n_{z} & n_{y} \\ n_{z} & 0 & -n_{x} \\ -n_{y} & n_{x} & 0 \end{array}\right)}_{\mathbf{N}} R(n,α)=cos(α)I+(1cos(α))nnT+sin(α)N 0nznynz0nxnynx0

Viewing transformation(观测变换)

View/Camera Transformation(视图变换)

What is view transformation(什么是视图变换)?

思考一下,如何拍一张照片?

  • 找到一个合适的位置然后摆一个Pos(model transformation),这一步是模型变换
  • 找一个好的角度来摆放相加(view transformation),这一步就是视图变换
  • 拍照,这一步是投影变换

模型、视图、投影变换,简称MVP变换。

How to perform view transformation?(如何进行视图变换呢?)

首先,要确定相机,主要有三个参数:

  • 位置: e ⃗ \vec{e} e
  • 视线方向: g ^ \hat{g} g^
  • 向上的方向: t ^ \hat{t} t^

当相机和物体同步移动时,拍出来的照片完全相同。

所以,我们通常将相机位置进行固定:

  • 相机位于原点,向上的方向是 y y y轴,视线方向是 − z -z z方向。
  • 并且将其它物体随着相机移动。

在这里插入图片描述
需要进行的改变:

  • e ⃗ \vec{e} e 移动到原点。
  • g ⃗ \vec{g} g 旋转到 − Z ⃗ -\vec{Z} Z
  • t ⃗ \vec{t} t 旋转到 Y Y Y
  • ( g ⃗ × t ⃗ ) (\vec{g}\times \vec{t} ) (g ×t )旋转到 X X X

先考虑平移,再考虑旋转:

  1. 首先,移动到原点:

    在这里插入图片描述c

  2. 旋转:
    直接旋转的变换矩阵不好写,但是反过来考虑很好写,所以我们可以先将逆矩阵写出来,再求一次逆就可以得到变换矩阵了。
    在这里插入图片描述
    因为旋转矩阵是正交矩阵,所以直接求转置就可以得到逆矩阵了。

最终的变换矩阵就可以得到了:
M v i e w = R v i e w T v i e w M_{view} = R_{view}T_{view} Mview=RviewTview

Projection Transformation(投影变换)

计算机图形学中的投影:

  • 3D to 2D
  • 正交投影
  • 透视投影

这两种投影的本质区别就是是否具有近大远小的特征。

在这里插入图片描述

Orthographic Projection(正交投影)

一种简单的理解方式:

  • 将相机摆放在原点,朝 − Z -Z Z方向看,向上方向为 Y Y Y
  • 扔掉 Z Z Z坐标。
  • 将结果矩阵平移和缩放到 [ − 1 , 1 ] 2 [-1, 1]^2 [1,1]2中。

在这里插入图片描述
一种正式一点的做法:
我们希望将一个立方体 [ l , r ] × [ b , t ] × [ f , n ] [l, r] \times [b, t] \times [f, n] [l,r]×[b,t]×[f,n]映射到一个标准的立方体上去 [ − 1 , 1 ] 3 [-1, 1]^3 [1,1]3
在这里插入图片描述

变换矩阵

首先,将中心移动到原点,再进行缩放将宽度变为2。

在这里插入图片描述

Perspective Projection(透视投影)

在计算机图形学、艺术、视觉系统中最常见的投影。
近大远小。
平行线将不在平行,收敛到一点。

如何进行透视投影呢?

  1. 先挤成一个长方体;
  2. 再对长方体做一次正交投影。

第一步的过程可以使用一个变换矩阵来描述: M p e r s p − > o r t h o M_{persp -> ortho} Mpersp>ortho;
第二步再使用一个正交投影变换矩阵来进行变换: M o r t h o M_{ortho} Mortho;

根据相似三角形,容易得到 y ′ = n z y y \prime = \frac{n}{z} y y=zny x ′ = n z x x \prime = \frac{n}{z} x x=znx
在这里插入图片描述
在齐次坐标下:
在这里插入图片描述
通过,已知的三个信息,我们可以推出变换矩阵的部分信息:
在这里插入图片描述

两个重要条件:

  1. 近平面上的任何点坐标不会发生任何变化。
  2. 远平面的点的 z z z坐标不会发生任何变化。

在这里插入图片描述
因此,变换矩阵的第三行一定是 ( 0 , 0 , A , B ) (0, 0, A, B) (0,0,A,B)的形式。

( 0 , 0 , f ) (0, 0, f) (0,0,f)这个点经过挤压后,仍然位于 ( 0 , 0 , f ) (0, 0, f) (0,0,f)
因此,可以得到如下方程:
在这里插入图片描述
通过两个方程,就可以得到 A A A B B B的值:
在这里插入图片描述
综上,变换矩阵 M p e r s p − > o r t h o M_{persp -> ortho} Mpersp>ortho就得到了。

参考资源

GAMES101 Lecture 04

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

古希腊简史

古希腊(Ancient Greece)狭义上指希腊地区从公元前12世纪迈锡尼文明毁灭至公元前146年希腊地区被罗马共和国征服为止。广义上指爱琴诸文明在罗马人征服前的全部历史。 克里特岛文明:早在约公元前3650年,爱琴海地区就孕育了灿烂的米…

理解Web3公链共识算法的原理与机制

Web3时代带来了去中心化、透明和安全的数字经济发展,而公链的共识算法是实现这一目标的关键。共识算法确保了公链网络中的节点对交易和状态的一致性达成共识,同时防止了恶意行为和双重支付等问题。本文将深入探讨Web3公链共识算法的核心原理与机制。 1.共…

《C++ Primer》--学习4

函数 函数基础 局部静态对象 局部静态对象 在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁,在此期间即使对象所在函数结束执行也不会对它有影响 指针或引用形参与 const main: 处理命令行选项 列表初始化返回…

无源供电无线测温系统的研究应用

摘要:无源供电无线测温在线监测系统是一种基于声表面波技术的测温技术,在变电站监测方面得到了很好的技术实践应用。本文对无源供电无线测温在线监测系统研究应用进行分析研究。 关键词:设备检测;无线测温。 引言 在电力系统设…

【Java-SpringBoot+Vue+MySql】Day1-环境搭建项目创建

目录 一、搭建环境 1、数据库 2、数据库可视化 3、JAVA-JDK 4、项目管理器 (1)修改仓库路径 (2)修改镜像 5、编译器 二、创建项目 1、新建项目 2、修改下载源 三、使用LomBok依赖 四、有则改之 1、发现问题 2、解决问…

Docker:如何删除已存在的镜像

要删除已存在的 Docker 镜像,您可以使用 docker rmi 命令。 以下是完整的流程 步骤1:停止容器 如容器正在运行需要停止正在运行的 Docker 容器,您可以使用 docker stop 命令。 以下是停止容器的步骤: 首先,使用 do…

二、PyTorch气温预测项目实战

一、数据集预处理 1,数据集介绍 训练数据集:temps.csv免费下载链接 数据集主要包括348条样本,共8个自变量,1个因变量 自变量因变量year:年actual:当天的真实最高温度month:月day:…

SCADA系统的三种架构

在工业自动化中,当需要使用各种设备时,有必要了解其中设计的架构。设备以各种方式相互通信 - 通过硬件或通信在现场和控制室之间共享数据。哪个环节进入哪个连接,是定义和解决所必需的,一旦我们了解了架构,那么我们就可…

血压计语音IC方案,低功耗语音芯片NV080C-SOP8

​近年来,随着智能化的发展,我们看到越来越多的医疗设备被智能化并应用到人们的生活中。这其中,血压计是其中之一,这是一种简单而普遍的医疗测量设备,用来测试人体的血压指数,它在生活中应用十分广泛。如今…

学Java其实不难,零基础小白如何快速学会Java?

去年的时候有个学弟刚跟好程序员说想转行,但是目前又比较迷茫,不知道该从事啥行业?跟小源说了下具体情况,小源也跟他分享了下相关的it行业规划,最后他学了一段时间的Java,成功找到一份Java的工作&#xff0…

Doo Prime 德璞资本:选择MT4外汇交易系统进行投资有哪些理由?

目前,只要你在做外汇交易,你就必须使用计算机或手机软件。目前网上有很多不同的交易软件,让投资者不知道如何选择。如果你正在从事或者听说过外汇保证金交易,那你可能多多少少有听过「MT4」这个词。但MT4到底是什么?为…

1-Single Thread

单线程执行模式 案例-1 背景 模拟3个人频繁地经过同一个只能容许一个人经过的门 。 (模拟三个线程调用同一个对象的方法) 当人通过门的时候,这个程序会在计数器中,递增通过的人数。另外, 还会记录通过的人的 “ 姓名与…

一篇文章带你了解Redis持久化机制(RDB、AOF)

目录 一、简介 什么是持久化? 为什么要持久化? 两种实现方式 二、RDB详解 2.1、介绍 2.2、save指令前后对比 2.3、save指令相关配置 一些设置 RDB快照条件 2.4、RDB第一种方式:手动save 2.5、RDB第二种方式:后台执行&…

加壳与脱壳,打造铁壁铜墙的Android应用防护境地

加壳和脱壳是什么? Android逆向加壳和脱壳是与Android应用程序安全相关的概念。 逆向加壳(Reverse Engineering with Packing):逆向加壳是指在给定的Android应用程序中,通过添加一个或多个防护层或加密算法来增加应用…

AI2:仅凭开源数据,可达ChatGPT 83%表现

夕小瑶科技说 原创 作者 | Python ChatGPT强大的性能让人爱不释手,ChatGPT迟迟不开源让人恨得牙根痒痒。那仅通过开源数据,能够取得怎样的效果呢?近期,AI2的一篇论文显示,最好的65B规模的模型能够达到ChatGPT表现的8…

设计一个feed流系统

什么是feed流系统 移动互联网时代,Feed流产品是非常常见的,如朋友圈、微博、抖音等,除此之外,很多App的都会有一个模块,要么叫动态,要么叫消息广场,这些也是Feed流产品。只要大拇指不停地往下划…

【机器学习】十大算法之一 “决策树”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

截至目前最强的70亿参数大语言模型:开源可商用的RedPajam 7B完全版发布!

RedPajama模型是TOGETHER发布的一个开源可商用的大模型。2023年6月6日,TOGETHER在官方宣布该模型完成训练,经过测试,该模型目前超过所有7B规模的大模型,比LLaMA-7B和Falcon-7B的效果还要好! TOGETHER公司是一家由豪华管…

HDMI之HDCP

概述 HDCP 1.4第1阶段 HDCP 1.4第2阶段 只有REPEATER设备,此阶段才会出现。 HDCP 1.4第3阶段 本文以Repeater为例,连接方式Source[Tx]=>[Rx]Repeater[Tx]=>[Rx]Sink。讲解一下HDCP1.4的通信过程。 设置SCDC 设置TMDS Configuration Rx W A8 20 00 Rx W A8 20 R …

云安全与云渗透

一、引言 随着技术的进步,云计算已成为信息技术领域的主流趋势。企业和个人都在利用云服务实现数据存储和处理的便利,但同时也带来了一系列的安全问题。对于这些问题,我们需要深入理解云安全和云渗透的重要性。本文将详细探讨这两个主题。 …