GAMES101-图形学入门 LEC3: TRANSFORMATION-2D

news2025/1/16 1:37:55

文章目录

  • 上节内容回顾:
  • 本节知识概要
    • Why study transformation
      • Modeling 模型变换
      • Viewing 视图变换
    • 2D transformations 二维变换
      • Scale
        • Uniform 均匀缩放
        • Non-Uniform 非均匀缩放
      • Reflection Matrix 反射矩阵
      • shear 切变
      • rotate 旋转,默认绕(0,0)旋转,默认逆时针方向
        • rotation matrix 旋转矩阵
      • Linear Transformation = Matrix
    • Homogeneous coordinates 齐次坐标
      • Translation 平移
    • Affine Transformation
      • Affine map = linear map + translation
      • Using homogenous coordinates:
      • 使用齐次坐标后的各种变换
        • Scale
        • Rotation
        • Translation
    • Inverse Transform 逆变换
    • 复杂的变换由简单的变换组合得到
      • 将复杂的变换先拆解

上节内容回顾:

  • Vectors
    • Basic operations: addition, multiplication
  • Dot Product
    • Forward / backward ( dot product positive / negative )
  • Cross Product
    • Left / right ( cross product outward / inward )
  • Matrics

本节知识概要

  • Transformation!
  • Today
    • Why study transformation
    • 2D transformations: rotation, scale, shear
    • Homogeneous coordinates
    • Composing transforms
    • 3D transformations

Why study transformation

Modeling 模型变换

rotation 旋转
scaling 缩放

Viewing 视图变换

projection 投影

2D transformations 二维变换

  • Representing transformation using matrices
  • Rotation, scale, shear

Scale

Uniform 均匀缩放

在这里插入图片描述
x ′ = s x y ′ = s y x' = s x \\ y' = s y x=sxy=sy
写成矩阵乘法:
[ x ’ y ′ ] = [ s 0 0 s ] [ x y ] \begin{bmatrix} x’ \\ y' \end{bmatrix} = \begin{bmatrix} s &0 \\ 0 & s \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [xy]=[s00s][xy]

Non-Uniform 非均匀缩放

在这里插入图片描述
x ′ = s x ⋅ x y ′ = s y ⋅ y x' = s_x \cdot x \\ y' = s_y \cdot y x=sxxy=syy
写成矩阵乘法:
[ x ’ y ′ ] = [ s x 0 0 s y ] [ x y ] \begin{bmatrix} x’ \\ y' \end{bmatrix} = \begin{bmatrix} s_x &0 \\ 0 & s_y \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [xy]=[sx00sy][xy]

Reflection Matrix 反射矩阵

水平反射
在这里插入图片描述
x ′ = − x y ′ = y x' = -x \\ y' = y x=xy=y

写成矩阵乘法:
[ x ′ y ′ ] = [ − 1 0 0 1 ] [ x y ] \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} -1 &0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [xy]=[1001][xy]

shear 切变

在这里插入图片描述
写成矩阵乘法:
[ x ′ y ′ ] = [ 1 a 0 1 ] [ x y ] \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 &a \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [xy]=[10a1][xy]

rotate 旋转,默认绕(0,0)旋转,默认逆时针方向

rotation matrix 旋转矩阵

在这里插入图片描述

[ x ′ y ′ ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ x y ] \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos\theta &-\sin\theta \\ \sin\theta& \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [xy]=[cosθsinθsinθcosθ][xy]

Linear Transformation = Matrix

x ′ = a x + b y y ′ = c x + d y x' = ax+by \\ y' = cx+dy x=ax+byy=cx+dy

[ x ′ y ′ ] = [ a b c d ] [ x y ] \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} a &b \\ c & d \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [xy]=[acbd][xy]

x ′ = M x x' = Mx x=Mx

Homogeneous coordinates 齐次坐标

Translation 平移

平移变换很特殊
在这里插入图片描述
平移变换无法用矩阵乘法表示

[ x ′ y ′ ] = [ a b c d ] [ x y ] + [ t x t y ] \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} a &b \\ c & d \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} + \begin{bmatrix} t_x \\ t_y \end{bmatrix} [xy]=[acbd][xy]+[txty]

但是我们并不希望平移变换独立开来,我们希望把平移变换也统一到矩阵乘法里面。
解决办法:齐次坐标(Homogenous coordinates)

其次坐标添加第三个坐标

若表示二维的点: 用(x,y,1)
若表示二维的向量:用(x,y,0)
注:因为向量具有平移不变性,所以向量的w坐标是0.
[ x ′ y ′ w ′ ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] + [ x + t x y + t y 1 ] \begin{bmatrix} x' \\ y' \\ w' \end{bmatrix} = \begin{bmatrix} 1 &0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} + \begin{bmatrix} x+t_x \\ y+t_y \\ 1 \end{bmatrix} xyw = 100010txty1 xy1 + x+txy+ty1

而且齐次坐标还满足:
向量 + 向量 = 向量
点 - 点 = 向量
点 + 向量 = 点
点 + 点 = ??

要得到问号的答案,需要用到齐次坐标的扩充定义:
[ x y w ] i s   t h e   2 D   p o i n t   [ x / w y / w 1 ] , w ≠ 0 \begin{bmatrix} x\\ y\\ w \end{bmatrix} is\ the\ 2D\ point\ \begin{bmatrix} x/w\\ y/w\\ 1 \end{bmatrix}, w \neq 0 xyw is the 2D point  x/wy/w1 ,w=0
所以 点+点 = 两点中点。

Affine Transformation

Affine map = linear map + translation

[ x ′ y ′ ] = [ a b c d ] ⋅ [ x y ] + [ t x t y ] \begin{bmatrix} x'\\ y' \end{bmatrix}= \begin{bmatrix} a&b\\ c&d \end{bmatrix} \cdot \begin{bmatrix} x\\ y \end{bmatrix}+ \begin{bmatrix} t_x\\ t_y \end{bmatrix} [xy]=[acbd][xy]+[txty]

Using homogenous coordinates:

[ x ′ y ′ 1 ] = [ a b t x c d t y 0 0 1 ] ⋅ [ x y 1 ] \begin{bmatrix} x'\\ y' \\ 1 \end{bmatrix}= \begin{bmatrix} a&b&t_x\\ c&d&t_y\\ 0&0&1 \end{bmatrix} \cdot \begin{bmatrix} x\\ y\\ 1 \end{bmatrix} xy1 = ac0bd0txty1 xy1

使用齐次坐标后的各种变换

Scale

S ( s x , s y ) = [ s x 0 0 0 s y 0 0 0 1 ] S(s_x,s_y) = \begin{bmatrix} s_x&0&0\\ 0&s_y&0\\ 0&0&1 \end{bmatrix} S(sx,sy)= sx000sy0001

Rotation

R ( α ) = [ cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α 0 0 0 1 ] R(\alpha)= \begin{bmatrix} \cos\alpha & -\sin\alpha & 0 \\ \sin\alpha & \cos\alpha & 0 \\ 0 & 0 & 1 \end{bmatrix} R(α)= cosαsinα0sinαcosα0001

Translation

T ( t x , t y ) = [ 1 0 t x 0 1 t y 0 0 1 ] T(t_x, t_y) = \begin{bmatrix} 1&0&t_x\\ 0&1&t_y\\ 0&0&1 \end{bmatrix} T(tx,ty)= 100010txty1

Inverse Transform 逆变换

M − 1 M^{-1} M1
M − 1 M^{-1} M1 is th inverse of transform M M M in both a matrix and geometic sense。

复杂的变换由简单的变换组合得到

注意:变换的顺序很重要
矩阵的乘法不满足交换律,所以先旋转再平移和先平移再旋转得到的结果是不一样的。

注意:连续矩阵相乘,是从右到左逐个应用的。

写完之后,可以把左边的矩阵先全部乘起来,得到的矩阵可以表示这个复杂的变换。
在这里插入图片描述

将复杂的变换先拆解

如何以c点为中心进行旋转?

  1. 先平移到原点
  2. 绕原点进行旋转
  3. 再平移回去

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

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

相关文章

Wetool 一款高效免费的微信社群管理工具,检查单向好友,自动回复、群发

这是一款高效免费的微信社群管理工具,目前功能主要有客服、机器人、单删查询、自动接受好友、以及群管理的一些工具下面放一下软件功能截图需要注意的是开启此工具需要下载旧版本的微信,这个在软件安装启动页面会自动进行下载。单删改查功能这个功能适用…

python基础篇之循环语句(附加选车牌号小系统开发)

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

【CocosCreator入门】CocosCreator项目创建 | 面板介绍

本文进行创建项目流程和编辑器界面的介绍,熟悉组成编辑器的各个面板、菜单和功能按钮。 目录 一、CocosCreator创建项目 二、CocosCreator编辑器界面 2.1层级管理器 2.1.1界面介绍 2.1.2层级管理器操作 2.2资源管理器(Assets) 2.2.1界…

asp.net c#大型综合管理系统源码 OA+HR+CRM综合办公管理系统源码

分享一套大型协同办公(OAHRCRM)系统源码。 本系统是强大构建系统,为OA办公系统HR人力资源管理系统CRM客户关系管理系统集合而成,人员可以单点登入多个系统完成自己的作业,超方便实用。全套源代码提供,不封…

System Extract 步骤

纲要: 把Composition下的SWC分配到System Description 描述的CAN网络的的ECU上。 System Extract目录 1. Create System Extract 2. Map SWC to ECU instance 3. Maping System Signal to Data Element 4. Create System Extract 1. Create System Extract Ri…

SAP 开发测试生产环境的简单介绍

客户端(即Client),是SAP组织架构里最高层的组织单元,所有数据,包括静态数据(科目、客户、供应商、物料、资产等)、业务数据(采购订单、销售订单、生产订单、维修订单等)都会归属到各个Client下。…

Kettle用法之Windows定时任务

1 概述 前文提到了kettle的定时任务计划,但这个任务需要开启kettle,本文将利用windows的任务计划实现kettle的定时任务。 2 实现方法 需要编写bat文件,然后windows的任务计划调用执行。 3 操作步骤 3.1 第1步 启动spoon,新建一个作业&#xf…

【Linux】编译器 - gcc 函数库

目录 一、背景知识 二、gcc如何执行 1、预处理 2、编译 3、汇编 4、链接 三、函数库 1、初识函数库 2、动静态库 2.1、动态库 2.2、静态库 2.3、动静态库的选择 一、背景知识 使用 vim 编辑器完成代码书写之后,我们需要使用 Linux 中的编译器 gcc 来对…

vLive虚拟直播,助力企业打造线上云年会

2023年农历春节临近,各大企业都纷纷开始筹备年会,面临员工分布各地无法同时参与、内容单一缺乏参与感等局限性,越来越多的企业选择做一场云年会替代传统线下年会。近日,蓝海彤翔集团举办2022年终总结表彰暨2023业务发展规划大会&a…

Transcational与Synchronized或Lock搭配使用导致并发问题

在多线程的情况下,我们经常会用到synchronized或者Lock来保证我们的线程安全。 但是当碰到Transcational之后又会碰撞出什么火花呢? 相信我,看完之后,你一定不会亏 首先回顾一下小知识点: 基于Transactional注解的是…

4.R语言【dplyr包】使用方法

b站课程视频链接: https://www.bilibili.com/video/BV19x411X7C6?p1 腾讯课堂(最新,但是要花钱,我花99😢😢元买了,感觉讲的没问题,就是知识点结构有点乱,有点废话)&…

黑马程序员Java教程学习笔记(二)

学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录黑马程序员Java学习笔记(二)数组概述数组定义方式一、访问、注意事项数组定义方式二,元素默认值规则数组遍历、元素求和数组…

HTML5+CSS3小实例:文本背景扫光效果

实例:文本背景扫光效果 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width…

【OpenGL学习】OpenGL环境配置

OpenGL环境配置 为了能够定义OpenGL上下文和创建用于显示的窗口&#xff0c;我们首先需要配置一些库来帮助我们实现&#xff0c;当前比较流行的用于创建窗口的库有GLUT&#xff0c;SDL&#xff0c;SFML和GLFW&#xff0c;其中网上的大部分教程使用的都是GLFW&#xff0c;因此我…

聊聊Pytorch2.0的新特性

一句话概括下&#xff0c;Pytorch2.0的功能介绍核心就是&#xff1a;torch.compile opt_module torch.compile(module)一行代码就能优化你的模型&#xff0c;优化后的模型和往常使用方式一样 速度会提升&#xff0c;比较重要的一点是&#xff1a;可以用于训练或者部署&#…

Grafana 告警接入飞书通知

Grafana 系列文章&#xff0c;版本&#xff1a;OOS v9.3.1 Grafana 的介绍和安装Grafana监控大屏配置参数介绍&#xff08;一&#xff09;Grafana监控大屏配置参数介绍&#xff08;二&#xff09;Grafana监控大屏可视化图表Grafana 查询数据和转换数据Grafana 告警模块介绍Graf…

带你从源码中分析关于vue(v2.7.10)的面试题

我们在面试的时候经常会被问到vue框架的原理类问题&#xff0c;我今天整理了一些常见问题和答案&#xff0c;希望有不正确之处还请指正。 1.new Vue时发生了什么 首先实例化一个对象&#xff0c;该对象执行init方法初始化生命周期等等&#xff0c;随后执行$mount方法开始生成v…

Modbus Slave缓冲区溢出漏洞CVE-2022-1068分析与复现

漏洞概述Modbus Slave是一个模拟工业领域通信协议Modbus从站的上位机软件&#xff0c;主要用于测试和调试Modbus从设备。该软件7.4.2以及以前的版本&#xff0c;在注册时&#xff0c;未对注册码长度进行安全检查&#xff0c;存在缓冲区溢出漏洞&#xff0c;导致软件崩溃。影响范…

在 Kubernetes 中部署并使用 KubeEdge

作者&#xff1a;马伟&#xff0c;青云科技容器顾问&#xff0c;云原生爱好者&#xff0c;目前专注于云原生技术&#xff0c;云原生领域技术栈涉及 Kubernetes、KubeSphere、KubeKey 等。 边缘计算在广泛制造业、工业、零售和金融等行业&#xff0c;随着云原生应用的兴起&#…

UDS诊断系列介绍07-2E服务

本文框架1. 系列介绍2E服务概述2. 2E服务请求与应答2.1 2E服务请求2.2 2E服务肯定响应2.3 2E服务否定应答3. Autosar系列文章快速链接1. 系列介绍 UDS&#xff08;Unified Diagnostic Services&#xff09;协议&#xff0c;即统一的诊断服务&#xff0c;是面向整车所有ECU的一…