计算机图形学(三) -- 3D 变换

这篇具有很好参考价值的文章主要介绍了计算机图形学(三) -- 3D 变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3D 变换

同样引入齐次坐标:

  • 3D 点 = ( x , y , z , 1 ) T (x, y, z, 1)^T (x,y,z,1)T
  • 3D 向量 = ( x , y , z , 0 ) T (x, y, z, 0)^T (x,y,z,0)T
    通常, ( x , y , z , w ) (x, y, z, w) (x,y,z,w)(w != 0) 表示一个坐标为 ( x / w , y / w , z / w ) (x/w, y/w, z/w) (x/w,y/w,z/w) 的 3D 点

用一个 4x4 的矩阵来表示 3D 的仿射变换
( x ′ y ′ z ′ 1 ) \begin{pmatrix}x'\\y'\\z'\\1\end{pmatrix} xyz1 = ( a b c t x d e f t y g h i t z 0 0 0 1 ) \begin{pmatrix}a&b&c&t_x\\d&e&f&t_y\\g&h&i&t_z\\0&0&0&1\end{pmatrix} adg0beh0cfi0txtytz1. ( x y z 1 ) \begin{pmatrix}x\\y\\z\\1\end{pmatrix} xyz1

2D/3D 变换中,是先做旋转(线性变换)再做平移

缩放(Scale)

S ( s x , s y , s z ) S(s_x, s_y, s_z) S(sx,sy,sz) = ( s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 ) \begin{pmatrix}s_x&0&0&0\\0&s_y&0&0\\0&0&s_z&0\\0&0&0&1\end{pmatrix} sx0000sy0000sz00001

平移(Translation)

T ( t x , t y , t z ) T(t_x, t_y, t_z) T(tx,ty,tz) = ( 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ) \begin{pmatrix}1&0&0&t_x\\0&1&0&t_y\\0&0&1&t_z\\0&0&0&1\end{pmatrix} 100001000010txtytz1

旋转(Rotation)

绕 x, y, z 三个轴分别做旋转的情况:
计算机图形学(三) -- 3D 变换

  • 绕 X 轴旋转
    R x ( α ) R_x(\alpha) Rx(α) = ( 1 0 0 0 0 c o s α − s i n α 0 0 s i n α c o s α 0 0 0 0 1 ) \begin{pmatrix}1&0&0&0\\0&cos\alpha&-sin\alpha&0\\0&sin\alpha&cos\alpha&0\\0&0&0&1\end{pmatrix} 10000cosαsinα00sinαcosα00001
  • 绕 Y 轴旋转
    R y ( α ) R_y(\alpha) Ry(α) = ( c o s α 0 s i n α 0 0 1 0 0 − s i n α 0 c o s α 0 0 0 0 1 ) \begin{pmatrix}cos\alpha&0&sin\alpha&0\\0&1&0&0\\-sin\alpha&0&cos\alpha&0\\0&0&0&1\end{pmatrix} cosα0sinα00100sinα0cosα00001
  • 绕 Z 轴旋转
    R z ( α ) R_z(\alpha) Rz(α) = ( c o s α − s i n α 0 0 s i n α c o s α 0 0 0 0 1 0 0 0 0 1 ) \begin{pmatrix}cos\alpha&-sin\alpha&0&0\\sin\alpha&cos\alpha&0&0\\0&0&1&0\\0&0&0&1\end{pmatrix} cosαsinα00sinαcosα0000100001

提示: R_y 中 − s i n α -sin\alpha sinα 而 R_x 和 R_z 中是 s i n α sin\alpha sinα 的原因是, Y 轴是由 Z 叉乘 X 得到的,而不是 X 叉乘 Z(右手定则).

3D 旋转(3D Rotation)

任意的 3D 旋转都可以表示为绕 X Y Z 轴旋转的组合,公式如下
R x y z ( α , β , γ ) R_{xyz}(\alpha,\beta,\gamma) Rxyz(α,β,γ) = R x ( α ) R y ( β ) R z ( γ ) R_x(\alpha)R_y(\beta)R_z(\gamma) Rx(α)Ry(β)Rz(γ)

什么是欧拉角

其中, α , β , γ \alpha, \beta, \gamma α,β,γ 分别代表绕 X Y Z 三个轴旋转的角度,叫做欧拉角 (pitch, yaw, roll)
pitch 是围绕 X 轴旋转,也叫做俯仰角
yaw 是围绕 Y 轴旋转,也叫偏航角
roll 是围绕 Z 轴旋转,也叫翻滚角

罗德里格斯旋转公式(Rodrigues’ Rotation Formula)

计算机图形学(三) -- 3D 变换

Viewing transformation

这里的 Viewing transformation 包括 View(视图)/Camera 变换和 Projection(投影) 变换

投影变换包括: 正交(Orthographic)投影和透视(Perspective)投影

什么是 View / Camera Transformation

思考怎么拍一张照片?

  1. 找到一个合适的地方并且排列好拍照的人 (模型变换 Model Transformation)
  2. 找到一个合适的拍照角度放置相机 (视图变换 View Transformation)
  3. 拍照 (投影变换 Projection Transformation)
    简称 MVP

怎么进行视图变换(View/Camera Transformation)?
首先定义相机的姿态(位置 e ⃗ \vec{e} e ,看的方向 g ^ \hat{g} g^,向上方向(up direction, t ^ \hat{t} t^))
计算机图形学(三) -- 3D 变换

相机标准位置(约定俗成)

相机的位置为原点(0, 0, 0), Y 轴向上,看向 -Z,物体随着相机变换
计算机图形学(三) -- 3D 变换
View Transformation 操作的是相机,其他物体跟着进行同样的变换

怎样将一个相机从一个任意的摆放,放到一个标准位置计算机图形学(三) -- 3D 变换

  • e ⃗ \vec{e} e 平移到原点
  • g ^ \hat{g} g^ 旋转到 -Z
  • t ^ \hat{t} t^ 旋转到 Y
  • 旋转 ( g x t ) (g x t) (gxt) 到 X (注解: g 叉乘 t 得到 t ⃗ g ⃗ \vec{t} \vec{g} t g 坐标系的另一个轴)与 X 对应

使用数学方式表示相机到标准位置的变换

计算机图形学(三) -- 3D 变换
第一步,先做 e ⃗ \vec{e} e 到原点的平移, T v i e w T_{view} Tview 如图
第二部,因为计算从 g 到 -Z, t 到 Y, (g x t) 到 X 的旋转矩阵 R v i e w R_{view} Rview 比较困难,则先考虑 X 到 (g x t), Y 到 t, Z 到 -g,然后在求逆, 因为旋转矩阵就是一个正交矩阵,对求得旋转矩阵做一个转置,则可得到 g 到 -Z, t 到 Y, (g x t) 到 X 的旋转矩阵 R v i e w R_{view} Rview

相机按照此变换矩阵进行变换之后,相机内的物体都需按照此矩阵进行同样的变换。

View/Camera Transformation 是为了 Projection Transformation 做准备

投影变换(Projection Transformation)

前面说到投影变换分为正交投影(Orthographic Projection) 和透视投影(Perspective Projection)
计算机图形学(三) -- 3D 变换

正交投影和透视投影的区别

正交投影, 不会给人带来近大远小的视觉(错觉),通常用在工程制图方面。
透视投影, 会给人带来近大远小的视觉(错觉)
计算机图形学(三) -- 3D 变换

正交投影

正交投影简单的理解/做法:

  1. 将相机放置在原点,看向 -Z,Y 是向上方向
  2. 那么如果直接将 Z 坐标直接扔掉,就可很方便的得到一个(x, y)二维平面的图形。
  3. 之后在将其平移和缩放到一个 [-1, 1] 的矩形内。
    计算机图形学(三) -- 3D 变换
    通常的做法:
    将一个立方体的 [左(left), 右(right)] x [下(bottom), 上(top)] x [远(fast), 近(near)] 映射到一个 canonical 的立方体上 [ − 1 , 1 ] 3 [-1, 1]^3 [1,1]3
    计算机图形学(三) -- 3D 变换
    通常的做法与简单的做法的区别:
  • 通过平移将立方体居中
  • 通过缩放将立方体变为 “canonical” 立方体

此种情况下,对于 X 和 Y 都是 l, b 在 X, Y 轴的负半轴,r 和 t 在 X, Y 轴的正半轴, 则都是 r > l, t > b。而 f 在 Z 的负半轴(Camera 看向 -Z),n 在 Z 的正半轴,所以当立方体距离相机近的 n 的值是大于距离相机远的 f(正常应该是距离越远,值越大)。这也是 OpenGL 为什么使用左手系的原因.

正交投影的变换矩阵

计算机图形学(三) -- 3D 变换
2 r − l \frac{2}{r-l} rl2 是将立方体的长度缩放到 [-1, 1] 的范围内,对于它的 Y 和 X 是同样的操作。
− r + l 2 -\frac{r+l}{2} 2r+l 是 X 轴的平移,对于它的 Y 和 X 是同样的操作

透视投影(Perspective Projection)

回顾一下齐次坐标的概念:
( x , y , z ) , ( k x , k y , k z , k ! = 0 ) , ( x z , y z , z 2 , z ! = 0 ) (x, y, z), (kx, ky, kz, k != 0), (xz, yz, z^2, z != 0) (x,y,z),(kx,ky,kz,k!=0),(xz,yz,z2,z!=0) 都表示在 3D 空间中的同一个点 ( x , y , z ) (x, y, z) (x,y,z)
例如, ( 1 , 0 , 0 , 1 ) (1, 0, 0, 1) (1,0,0,1) ( 2 , 0 , 0 , 2 ) (2, 0, 0, 2) (2,0,0,2) 都表示 ( 1 , 0 , 0 ) (1, 0, 0) (1,0,0)

怎样实现透视投影

  • 先将 Frustum 挤压称为一个长方体(n -> n, f -> f)( M p e r s p − > o r t h o M_{persp->ortho} Mpersp>ortho)
  • 然后做正交投影
    计算机图形学(三) -- 3D 变换

计算透视投影的变换矩阵

计算机图形学(三) -- 3D 变换
y ′ y' y 类似的 x ′ = n z x x' = \frac{n}{z}x x=znx
那么在齐次坐标系中就有:
计算机图形学(三) -- 3D 变换
计算机图形学(三) -- 3D 变换
计算机图形学(三) -- 3D 变换
计算机图形学(三) -- 3D 变换
计算机图形学(三) -- 3D 变换
计算机图形学(三) -- 3D 变换文章来源地址https://www.toymoban.com/news/detail-473586.html

到了这里,关于计算机图形学(三) -- 3D 变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机图形学01】坐标变换

             将坐标变换为标准化设备坐标,接着再转化为屏幕坐标的过程通常是分步进行的,也就是类似于流水线那样子。在流水线中,物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系统(Coordinate System)。将物体的坐标变换到几个 过渡 坐标系(Intermediate Coor

    2024年02月10日
    浏览(40)
  • 计算机图形学 | 变换与观察

    华中科技大学《计算机图形学》课程 MOOC地址:计算机图形学(HUST) 回顾几何阶段 整体流程: 这其中存在3种变换: 坐标系的变换 模型本身的运动 观察者的运动 几何变换 以上各种变换都可以通过以下变换的复合来计算: 平移 比例 旋转 对称 错切 图形的几何变换是指对图

    2023年04月27日
    浏览(44)
  • 【计算机图形学】图形变换(以任意直线为对称轴的对称变换)

    模块3-2 图形变换 一 实验目的 编写图形各种变换的算法 二 实验内容 1 :任意直线的对称变换。要求将变换矩阵写在实验报告中,并与代码匹配。求对任意直线Ax+By+C=0的对称变换矩阵。 实验结果如下图所示: 1:预设图形初始化 2:鼠标左键点击直线起点 3:鼠标右键点击直线

    2024年02月01日
    浏览(57)
  • 计算机图形学:二维图形的几何变换(算法原理及代码实现)

    对于一个二维图形作平移、旋转、放缩变换,可以转换为在二维坐标系中图形的所有点分别可以对应到在x,y轴方向分别平移tx,ty(平移)、绕一点旋转固定的角(旋转)、在x,y轴方向分别放缩sx,sy倍。 对于变换的原理,只需要将原图形的点通过极坐标或者相加、相乘,再

    2024年02月11日
    浏览(51)
  • 计算机图形图像技术(OpenCV核心功能、图像变换与图像平滑处理)

    1、显示图像 ①功能:在指定窗口中显示图像。 ②参数: name 为窗口的名字; image 为待显示的图像。 ③说明:可显示彩色或灰度的字节图像和浮点数图像,彩色图像数据按BGR顺序存储。 2、读入图像 ①功能:从指定文件读入图像。 ②参数: filename 为图像文件名,支持BMP、

    2024年02月03日
    浏览(50)
  • 计算机图形学:绘制一个3d交互场景(1)

    OpenGL作为一种图形与硬件的接口,与其他图形程序开发工具相比较,它提供了众多图形函数,直观的编程环境简化了三维图形的绘制过程,使用OpenGL搭建一个三维场景,能够通过输入设备与场景内物体交互。 豪华单间 配置环境:vs22+freeglut库 1.绘制墙体使其成为封闭空间,在

    2024年02月11日
    浏览(108)
  • 计算机图形学的革命:从2D到3D

    计算机图形学是一门研究如何在计算机屏幕上生成图像的学科。从其出现以来,计算机图形学经历了两次革命性的变革:从2D到3D,以及从矢量图形到位置 Independent Bitmap Images(Pixels)。这篇文章将深入探讨从2D到3D的革命,揭示其背后的核心概念、算法原理、数学模型以及代码实

    2024年02月19日
    浏览(41)
  • 计算机图形学环境配置java3D

    java3Dwindows64位下载 这个是默认到下图路径中:(记住这个路径,待会要导入jar包) 选择这个: 所以我把jdk改成了这个1.8版本就可以了: 将java3D目录下面的bin目录中的dll文件拷贝到idea里配置的jdk路径的bin目录下: idea里配置的jdk路径的bin目录: 把这个文件拷贝过去: 打开

    2024年02月09日
    浏览(37)
  • 计算机视觉与图形学-神经渲染专题-pi-GAN and CIPS-3D

    《pi-GAN: Periodic Implicit Generative Adversarial Networks for 3D-Aware Image Synthesis 》 摘要 我们见证了3D感知图像合成的快速进展,利用了生成视觉模型和神经渲染的最新进展。然而,现有的方法在两方面存在不足:首先,它们可能缺乏底层的3D表示,或者依赖于视图不一致的渲染,从而合

    2024年02月14日
    浏览(63)
  • 深度学习·理论篇(2023版)·第002篇深度学习和计算机视觉中的基础数学知识01:线性变换的定义+基于角度的线性变换案例(坐标变换)+点积和投影+矩阵乘法的几何意义+图形化精讲

    💕 恭喜本博客浏览量达到两百万,CSDN内容合伙人,CSDN人工智能领域实力新星~ 🧡 本文章为2021版本迭代更新版本,在结合有效知识的基础上对文章进行合理的增加,使得整个文章时刻顺应时代需要 🧡 本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理

    2023年04月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包