目录
- 0 引言
- 1 3D Transformations
- 1.1 缩放和平移变换
- 1.2 旋转变换
- 1.3 Quat 四元数
- 2 Viewing Transformation 观测变换
- 2.1 View(视图)/ Camera Transformation 视图变换
- 2.1.1 什么是视图变换
- 2.1.2 如何进行视图变换
- 2.1.3 总结
- 2.2 Projection(投影) Transformation
- 2.2.1 Orthographic(正交)projection
- 2.2.2 Perspective(透视)projection
- 2.2.2.1 回顾一下齐次坐标
- 2.2.2.2 如何进行透视投影
- 🙋♂️ 作者:海码007
- 📜 专栏:计算机图形学专栏
- 💥 标题:
- ❣️ 寄语:对知识永远有兴趣!
- 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正
0 引言
对于二维变换中的旋转矩阵而言,旋转矩阵的转置等于旋转矩阵的逆。(说明这个旋转矩阵是正交矩阵)
1 3D Transformations
1.1 缩放和平移变换
1.2 旋转变换
旋转相对复杂,绕不同轴旋转不一样。x
下面是分别绕着 x,y,z轴旋转的情况
如果是一般的旋转呢,不是只围绕XYZ中某一个轴进行旋转,那么就要将复杂问题转换为简单问题,我们可以将一般性的旋转转换为XYZ轴上的旋转组合。
如下图所示:Row(X)、Pitch(Y)、Yaw(Z)。
我们可以将一般性的旋转转换为绕X旋转、绕Y旋转、绕Z旋转的组合。
罗德里德斯旋转公式:
定义了旋转轴 n
、旋转角度 α
,这里的旋转轴是指经过轴心的向量,那假如我要绕着不经过轴心的向量进行旋转呢?那么就可以将这个复杂的变换分解为简单的变换组合,可以现将旋转轴移动到轴心,然后旋转,最后再移动回去。
1.3 Quat 四元数
自己扩充,这个概念也很重要
四元数是一种数学结构,广泛应用于计算机图形学和动画中。它们扩展了复数的概念,其中一个复数有两个实部和一个虚部,而一个四元数有一个实部和三个虚部。四元数通常表示为:
q = w + x i + y j + z k q = w + xi + yj + zk q=w+xi+yj+zk
其中, w w w 是实部, x x x, y y y, 和 z z z 是虚部, i i i, j j j, 和 k k k 是虚数单位,满足以下关系:
i 2 = j 2 = k 2 = i j k = − 1 i^2 = j^2 = k^2 = ijk = -1 i2=j2=k2=ijk=−1
四元数具有一些有用的性质,使其在计算机图形学中得到广泛应用,特别是在旋转和方向插值方面。例如,它们可以用来表示旋转,因为它们具有良好的旋转合成性质。
在计算机图形学中,四元数通常用于执行旋转和变换,因为它们可以更高效地表示旋转,并且避免了万向节锁等问题,与使用欧拉角或旋转矩阵相比,它们提供了更好的性能和稳定性。
四元数在旋转和方向插值方面的应用非常重要,因为它们提供了一种有效的方式来表示和处理旋转变换,同时避免了欧拉角和旋转矩阵所带来的一些问题。
-
表示旋转:四元数可以用来表示三维空间中的旋转。通过将四元数 q = w + x i + y j + z k q = w + xi + yj + zk q=w+xi+yj+zk 视为旋转的表示,其中 w w w 是余弦值,而 ( x , y , z ) (x, y, z) (x,y,z) 是轴的正弦分量,可以将旋转应用于向量或物体。
-
旋转合成:通过将两个旋转的四元数相乘,可以合成一个新的旋转。这种合成旋转的操作是通过将两个旋转的四元数相乘得到一个新的四元数来完成的,这个四元数代表了这两个旋转的组合。这种操作比使用旋转矩阵进行矩阵相乘更有效率,并且不容易产生误差。
-
方向插值:在动画和过渡中,我们经常需要平滑地从一个方向过渡到另一个方向,例如在相机朝向或对象方向变换中。使用四元数进行方向插值(slerp)可以提供平滑的过渡,而不会出现奇异性(例如万向节锁)或者旋转路径不连续的问题。
-
插值:除了方向插值外,四元数还可以用于在旋转动画中插值,以平滑地过渡旋转状态。
总的来说,四元数在旋转和方向插值方面的应用使得在计算机图形学中更容易地处理旋转操作,同时提供了更高效和稳定的解决方案。
2 Viewing Transformation 观测变换
2.1 View(视图)/ Camera Transformation 视图变换
在一个场景中,从不同的角度看得到的是不同的画面,所以要唯一确定一个相机,以及相机的方向。这样从三维场景转换到二维图像才是唯一的。
2.1.1 什么是视图变换
可以想一想我们是如何拍一张照片的
- 找一个地方,然后大家站好位置(模型变换)
- 相机找到一个好的角度(视图变换)
- 拍照(投影变换)
2.1.2 如何进行视图变换
也就是说“如何摆放相机位置”,那么如何定义相机的方位呢?
- Position e (相机的位置)
- Look-at / gaze direction g (相机的向前方向)
- Up direction t (相机的向上方向)
确定这三个要素,才能唯一确定相机的信息。
规定相机位置在原点,相机往 -Z 方向看,相机向上向量是 Y 轴。(这样可以简化后序操作)
然后把相机变换到刚才规定的方位
- 首先将相机位置 e 变换到 原点 origin
- 然后旋转相机的朝向 g 到 -Z 轴
- 旋转相机的向上方向 t 到 Y 轴
- 旋转 (g × t) 到 X 轴
然后把上述的操作用矩阵变换来表示,如下
2.1.3 总结
在计算机图形学中,视图变换、模型视图变换和模型变换虽然相关,但指代的概念略有不同:
-
视图变换(View Transformation):视图变换是将场景从世界坐标系转换到相机坐标系(也称为观察坐标系或视图坐标系)的过程。在这个过程中,通常会进行平移、旋转和缩放等操作,以便相机观察场景的不同部分。视图变换通常将世界空间中的对象变换到相机的视角,
以便进行后续的投影操作
。 -
模型视图变换(Model-View Transformation):模型视图变换是将模型从模型坐标系变换到观察坐标系(或视图坐标系)的过程。它是视图变换和模型变换的结合,通常包括将模型进行适当的旋转、平移和缩放,以及将模型从世界空间变换到相机坐标系中。模型视图变换将模型放置在相机视角的正确位置和方向,以便正确呈现在屏幕上。
-
模型变换(Model Transformation):模型变换是将对象从局部坐标系变换到世界坐标系的过程。这个过程通常包括对对象进行旋转、平移和缩放等操作,以便将对象放置在世界空间的正确位置和方向上。
虽然这些概念在某些情况下可以互换使用,但在其他情况下它们表示的是不同的操作和阶段。例如,在光栅化阶段中,我们通常使用模型视图变换将模型变换到相机视角,然后使用投影变换将其投影到屏幕上。
2.2 Projection(投影) Transformation
投影变换是计算机图形学中的一个重要概念,用于将三维场景投影到二维屏幕上,以便最终显示。主要有两种类型的投影变换:透视投影(Perspective Projection)和正交投影(Orthographic Projection)。
-
透视投影:透视投影是一种模拟
人眼视觉
的投影方式,近大远小。在透视投影中,远处的物体看起来比近处的物体小,投影到屏幕上的位置也不同。透视投影常用于创建具有逼真感的图像
,如计算机游戏和虚拟现实应用中。 -
正交投影:正交投影是一种投影方式,它不考虑物体距离的远近,所有物体在投影中的大小和位置都保持不变。在正交投影中,投影线是平行的,因此被投影到屏幕上的物体不会产生透视效果。正交投影
常用于技术绘图和CAD软件
等领域,以及需要精确测量物体尺寸
的情况。
在进行投影变换时,通常会将三维场景中的对象的坐标转换为裁剪空间中的坐标,然后再将裁剪空间中的坐标转换为屏幕空间中的坐标。这个过程通常包括透视除法和屏幕空间的归一化。透视除法是将裁剪空间中的坐标的 x x x, y y y, z z z 分量除以其 w w w 分量,得到规范化的坐标。然后,屏幕空间的坐标可以通过将规范化坐标映射到屏幕空间的范围内来得到,通常是通过将坐标映射到屏幕的像素坐标范围内。
投影变换是计算机图形学中渲染管线的一个关键步骤,在将三维场景转换为二维图像时起着至关重要的作用。
2.2.1 Orthographic(正交)projection
- 首先摆放好相机方位
- 然后把Z轴坐标值去掉
2.2.2 Perspective(透视)projection
使用的最广泛的投影。平行线不再平行,
2.2.2.1 回顾一下齐次坐标
2.2.2.2 如何进行透视投影
投影变换是计算机图形学中的一种重要变换,用于将三维场景中的对象投影到二维屏幕上。其中,视锥体(Frustum)是一种常用的投影模型,它由一个近裁剪面(Near Clipping Plane)、一个远裁剪面(Far Clipping Plane)、以及四条视锥体的侧面构成。投影变换负责将视锥体中的场景投影到一个标准立方体(或者称为规范视锥体)中,然后再进行透视或正交投影,最终将投影的结果映射到屏幕上。
-
近裁剪面(Near Clipping Plane):视锥体的近裁剪面是视锥体的一个平面,通常位于相机位置之前的一个距离内。它定义了从相机到场景中对象的可见最小距离。
-
远裁剪面(Far Clipping Plane):视锥体的远裁剪面是视锥体的另一个平面,通常位于相机位置之后的一个距离外。它定义了从相机到场景中对象的可见最大距离。
简单好理解的方式:①将远裁剪面的矩形挤成近裁剪面同样大小; ②然后直接进行正交投影即可。