游戏开发数学笔记之变换

仅为个人学习网易的3d数学基础笔记。

前言:
为什么需要向量的变换?比如模型的顶点坐标,通常是保存在模型的坐标空间,当渲染该模型到屏幕上时,需要将其坐标转换到摄像机空间。

1 线性变换

1.1 坐标变换

设在一个3D坐标定义一个坐标系 C ,点P 为 <x,y,z>。再定义另一个坐标系 C ,点P 为 <x,y,z> 。点P 可以通过 C 中 P 的坐标线性变换得到 。
在这里插入图片描述
矩阵形式:
在这里插入图片描述

T 表示 C 的原点到 C的原点的平移量
U,V,W 为列向量的矩阵表示将C的坐标轴变换到C的坐标轴朝向的变换量。

1.2 缩放

1.2.1 等比缩放

一个系数 a 对向量 P 进行缩放变化 C = aP 。矩阵形式:
在这里插入图片描述

1.2.2 非等比缩放

对角线系数不一定相等。矩阵以及逆矩阵表示
在这里插入图片描述
在这里插入图片描述

1.3 旋转

在这里插入图片描述
如图,将向量P绕轴A旋转 θ 度,A的模长为1!!! 。可以将P分解为平行垂直A轴的两个分量如图标注。

平行A轴的分量是怎么来的?注意这个 A 的模长。首先 A · P = |A||P|cosθ = |P| cosθ。得到P在A轴上投影的长度,再乘一个A,得到方向。

平行A轴分量不受旋转影响,所以问题简化为垂直分量绕A轴旋转并加上不变的平行分量。
为了方便分析,把该垂直分量旋转的平面建立一个二维坐标系,其中垂直分量为一个基向量,另一个基向量是同时垂直于轴A和垂直分量。如图
在这里插入图片描述
这条向量可以通过A X P 得到,对于垂直分量旋转 θ 变换后的表示如下图
在这里插入图片描述
在这里插入图片描述

怎么来的呢?如下分析
在这里插入图片描述
A X P 垂直的面包含了垂直分量这个向量,所以他们相互垂直,画出辅助线,两者投影分量相加就是结果。

将旋转分量加入到平行分量,最终公式如下:
在这里插入图片描述
将叉乘点积换成公式:
在这里插入图片描述
合并,c = cos角度,s = sin角度
在这里插入图片描述

2 齐次坐标系统

将点P从一个坐标系变换到另一个坐标系,同时考虑缩放旋转平移。最终公式如下:
在这里插入图片描述
M 是一个 3 * 3 矩阵,表示旋转缩放,T是一个三位平移向量。
但是变换多次,多次将P 带入 P ,式子十分冗长,因此需要齐次坐标,并使用一个 4 * 4 矩阵进行变换。

齐次坐标就是将点P扩展成四维向量<x,y,z,w> w = 1(w = 1 表示坐标点 ,0 表示向量)变换矩阵M 和 平移向量 T 合成如下:
在这里插入图片描述
要将齐次坐标转换为原3D坐标系中:
在这里插入图片描述
w 不能为 0 ,对于坐标点,平移旋转缩放等线性变换 w = 1不变。但是投影变换会改变 w 的值。

3 组合变换

如果将一个立方体,先缩放,再旋转,再平移。变换矩阵分别为 S R T。那么立方体八个顶点变换可以写作:
在这里插入图片描述
矩阵结合律:
在这里插入图片描述
这样,我们定一个矩阵C = SRT,封装为一个矩阵组合变换。这样计算效率更高,从三次矩阵向量乘法变为一次。

4 欧拉角

矩阵旋转变换不能实现插值且空间大,因此有了欧拉角

4.1 定义

是一种形式来表达旋转变换。简单说,就是模型绕坐标系三个坐标轴的旋转角度。
坐标系可以是世界坐标系或者物体坐标系。欧拉角不一定唯一,且模型任意旋转都可以分解为欧拉角形式。下图pitch- yaw - roll欧拉角系统,对应颜色的轴对不同颜色对旋转角度。
在这里插入图片描述
但是,欧拉角有个最大的bug就是万向锁。因此3D引擎大量使用四元数。

5 四元数

相较于旋转矩阵优点:插值均匀,空间小等等

5.1 定义

四元数是简单的超复数。类似于复数,但是有三个虚部单位<i ,j ,k>。
一个四元数q表示如下:
在这里插入图片描述
更简单的写法:
q = s + v.
其中,s是标量部分,也就是w,v是向量部分<x,y,z>。

5.2 四元数使用

如果给定单位旋转轴<x,y,z>和一个角度θ。对应四元数如下:
在这里插入图片描述

5.3 四元数性质

四元数中,虚部满足一下性质:
在这里插入图片描述
四元数不满足交换量律所以要注意乘法顺序,四元数乘法如下:就是一个个乘
在这里插入图片描述
以简单版的标量向量形式:
在这里插入图片描述
四元数也具有共轭四元数。
在这里插入图片描述
长度(也就是模长):
在这里插入图片描述

5.4 四元数插值运算

四元数插值运算是很大的优势。
给定四元数 q1,q2,q1是结果,其中 t = [0 , 1] ,插值过程如图:
在这里插入图片描述
在这里插入图片描述
从图中可以看出,线性插值结果为虚线部分,当t改变,qt沿着弦变换,导致t以恒定速度但是角度并非以恒定速度变换。所以需要使用球面线性插值:
在这里插入图片描述
θ 就是两个四元数的夹角。球面插值保证的t改变角度恒定变化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值